C语言实现链表尾插法和头插法
时间: 2024-09-16 18:00:42 浏览: 50
头插法、尾插法、链表长度test-c-master.zip
在C语言中,链表是一种动态数据结构,常用于存储一系列元素,不需要预先确定其大小。头插法(insert at head)和尾插法(insert at tail)是链表操作的基本方法。
1. **头插法(Insert at Head)**:
- 函数原型通常可以这样定义:`void insertAtHead(struct Node* *head, int data)`,其中`struct Node* *head`是头节点指针的指针,`data`是要插入的新值。
- 创建一个新的节点,并将其`next`字段设置为原来的头节点。
- 更新头节点指针指向新节点。
- 如果头节点本身就是新创建的,则不会改变原有链表。
2. **尾插法(Insert at Tail)**:
- 函数原型类似:`void insertAtTail(struct Node* *head, int data)`。
- 步骤:
- 创建新的节点并将它设为`NULL`,然后将新节点的`next`指针设置为当前最后一个节点。
- 如果链表为空(即头节点`*head`为`NULL`),则新节点同时作为头节点和尾节点。
- 否则,遍历链表找到最后一个节点并更新它的`next`指针。
下面是一个简单的示例代码片段:
```c
// 假设链表节点结构如下
typedef struct Node {
int data;
struct Node* next;
} Node;
// 头插法函数
void insertAtHead(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
// 尾插法函数
void insertAtTail(Node** head, int data) {
if (*head == NULL) {
insertAtHead(head, data);
} else {
Node* current = *head;
while (current->next != NULL)
current = current->next;
current->next = (Node*)malloc(sizeof(Node));
current->next->data = data;
current->next->next = NULL;
}
}
阅读全文