王道考研数据结构单链表的插入代码
时间: 2024-10-12 21:16:06 浏览: 46
在王道考研的数据结构教程中,单链表的插入操作通常是这样的。假设我们有一个`ListNode`结构体,代表链表节点:
```c++
// 定义链表节点
typedef struct ListNode {
int val; // 节点值
ListNode* next; // 指向下一个节点的指针
} ListNode;
```
然后,我们可以编写一个函数`insertAtHead`来在链表头部插入一个新节点:
```c++
void insertAtHead(ListNode** head, int val) {
// 创建新节点
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
// 设置新节点值并指向头节点
newNode->val = val;
newNode->next = *head;
// 将头指针更新为新节点
*head = newNode;
}
```
如果你想在链表的指定位置插入,比如第二个位置,可以先遍历找到那个位置,再插入:
```c++
void insertAtPosition(ListNode** head, int pos, int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->val = val;
newNode->next = NULL;
if (*head == NULL || pos == 0) {
insertAtHead(head, val);
} else {
ListNode* current = *head;
for (int i = 0; i < pos - 1 && current != NULL; ++i) {
current = current->next;
}
if (current != NULL) {
newNode->next = current->next;
current->next = newNode;
} else {
printf("Invalid position.\n");
}
}
}
```
阅读全文