下面是详细的「C++链表节点的添加和删除介绍」攻略。
添加节点
首先需要创建链表的结构体,来存储节点的信息,比如节点值和指向下一个节点的指针。下面是一个基本的链表结构体模板:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
接下来就可以利用这个结构体来创建新节点并添加到链表中,有两种添加节点的方法:
头插法
头插法是将新节点插入到链表的头部,成为链表的第一个节点。其操作流程是:
- 创建一个新的节点;
- 将新节点的 next 指向链表的头结点;
- 将新节点赋值给链表的头结点。
示例代码:
void insertAtHead(ListNode* &head, int value) {
ListNode* newNode = new ListNode(value);
newNode->next = head;
head = newNode;
}
尾插法
尾插法是将新节点插入到链表的尾部,成为链表的最后一个节点。其操作流程是:
- 创建一个新的节点;
- 找到链表的尾部节点;
- 将尾节点的 next 指向新节点。
示例代码:
void insertAtTail(ListNode* &head, int value) {
ListNode* newNode = new ListNode(value);
if (head == NULL) {
head = newNode;
return;
}
ListNode* tail = head;
while (tail->next != NULL) {
tail = tail->next;
}
tail->next = newNode;
}
删除节点
同样地,我们需要创建一个链表结构体来存储节点的信息。删除节点有两种方法:
删除指定节点
删除指定节点即从链表中删除一个指定的节点。其操作流程是:
- 找到要删除节点的前一个节点;
- 将前一个节点的 next 指向要删除节点的下一个节点。
示例代码:
void deleteNode(ListNode* &head, int value) {
if (head == NULL) {
return;
}
if (head->val == value) {
head = head->next;
return;
}
ListNode* prev = head;
ListNode* cur = head->next;
while (cur != NULL) {
if (cur->val == value) {
prev->next = cur->next;
return;
}
prev = prev->next;
cur = cur->next;
}
}
删除链表中所有值为给定值的节点
删除链表中所有值为给定值的节点即删除链表中所有符合条件的节点。其操作流程是:
- 创建一个伪头节点;
- 遍历链表,删除所有符合条件的节点。
示例代码:
void deleteAllNodes(ListNode* &head, int value) {
ListNode* dummy = new ListNode(-1);
dummy->next = head;
ListNode* prev = dummy;
ListNode* cur = head;
while (cur != NULL) {
if (cur->val == value) {
prev->next = cur->next;
} else {
prev = cur;
}
cur = cur->next;
}
head = dummy->next;
}
以上即是「C++链表节点的添加和删除介绍」的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++链表节点的添加和删除介绍 - Python技术站