用头插法建立一个不带头结点的双向循环链表,然后删除第一个输入的内容。1、头插法创建:逆序逐个输入字符“bupt”,以“$”结束。 2、删除:删除字符t。用c语言
时间: 2024-12-17 22:21:58 浏览: 9
在C语言中,我们可以使用头插法(即每次在列表头部插入节点)创建一个不带头结点的双向循环链表,并在需要时删除指定内容。以下是这个过程的一个简单步骤:
1. 创建链表结构:
```c
typedef struct Node {
char data; // 节点数据
struct Node* prev; // 指向前一个节点的指针
struct Node* next; // 指向前一个节点的指针(双向链表)
} Node;
```
2. 创建函数:
首先,我们需要一个用于插入节点的函数,这里是一个简化的版本,仅处理逆序插入并创建循环:
```c
void insert(Node** head, char ch) {
if (*head == NULL) {
*head = (Node*)malloc(sizeof(Node));
(*head)->data = ch;
(*head)->prev = *head;
(*head)->next = *head;
} else {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = ch;
new_node->prev = (*head)->prev;
new_node->next = *head;
(*head)->prev->next = new_node;
(*head)->prev = new_node;
}
}
```
3. 删除操作:
删除操作相对复杂一些,因为我们是逆序遍历链表,需要找到待删除节点的前一个节点(因为双链表)。这里是一个简化版的删除函数:
```c
void deleteFirst(Node** head, char target) {
if (*head != NULL) {
Node* current = *head;
while (current->next != *head && current->data != target)
current = current->next;
if (current->data == target) { // 找到了目标节点
current->prev->next = current->next;
if (current->next != *head)
current->next->prev = current->prev;
free(current); // 释放内存
}
}
}
```
4. 主程序:
```c
int main() {
Node* head = NULL;
// 输入字符串 "bupt$" 并创建链表
for(char ch = 'u'; ch != '$'; ch--) {
insert(&head, ch);
}
// 删除字符 "t"
deleteFirst(&head, 't');
return 0;
}
阅读全文