链表,在尾部后面插入节点
Linked List, insert node after tail
我的函数应该在给定位置之后插入一个新节点,或者,如果位置是尾部,则将其插入尾部之后并制作新的节点尾部。
它适用于在给定位置插入节点,但在尾部之后插入时不起作用。当我运行用于在尾巴后插入的代码时,出现分段错误。任何帮助将不胜感激!
ListNode *insertAfter(ListNode *argNode, int value) {
ListNode *newNode = new ListNode(value);
if(argNode != tail){
argNode->next = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
size++;
return newNode;
}
让链表如下。
Node1 -> Node2 -> NULL
Tail=Node2
如果将节点 3 插入末尾。
Tail->Next = Node3
Node3->Next = NULL
So, the result is
Node1->Node2->Node3-> NULL
还行。但是,如果您将节点 3 插入到节点 1 之后的位置。
ArgNode(Node1)
prev: Node1->Node2->NULL
next: Node1->Node3->NULL. Node2->NULL.
问题是 Node3 的下一个位置丢失了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct ListNode {
int value ;
ListNode *next ;
ListNode(int v) { value=v; next=NULL; }
};
int size=0 ;
ListNode *head = NULL;
ListNode *tail=NULL ;
ListNode *insertAfter(ListNode *argNode, int value) {
ListNode *newNode = new ListNode(value);
if ( argNode==NULL ) {
if ( head==NULL ) {
// initialize first node.
head = tail = newNode ;
newNode->next=NULL ;
} else {
// insert first node
newNode->next = head ;
head = newNode ;
}
}
else if(argNode != tail){
newNode->next = argNode->next;
argNode->next = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
size++;
return newNode;
}
void printList(ListNode *a) {
while ( a!=NULL ) {
printf("%d ", a->value) ;
a=a->next ;
}
printf(" size=%dn", size) ;
}
int main() {
ListNode *n, *n3, *n2 ;
head =insertAfter(NULL, 10) ;
printList(head) ;
n2 = insertAfter(tail, 20) ;
printList(head) ;
n3 = insertAfter(tail, 30) ;
printList(head) ;
n = insertAfter(tail, 40) ;
printList(head) ;
n = insertAfter(n3, 35) ;
printList(head) ;
n = insertAfter(n2, 25) ;
printList(head) ;
n = insertAfter(NULL, 5) ;
printList(head) ;
return 0 ;
}
输出是这样的。
10 size=1
10 20 size=2
10 20 30 size=3
10 20 30 40 size=4
10 20 30 35 40 size=5
10 20 25 30 35 40 size=6
5 10 20 25 30 35 40 size=7
argNode->next = newNode;
之前插入newNode->next = argNode->next;
.如果不是,你就会破坏链表中的链,因为你忘记将argeNode->next值附加到链上。
相关文章:
- 在具有开放寻址的哈希表中插入节点 [优化逻辑]
- 使用代码块在链表的开头插入节点
- 使用 C++ 在 BTree 中递归插入节点
- 在单链表中的后端插入节点
- 在索引中插入节点:链接列表未正确返回列表
- 以分类方式插入节点时遇到麻烦
- 链表,在尾部后面插入节点
- 在 BST 中插入节点时出现逻辑错误
- 简单树插入节点函数显示为空
- 在链表的末尾插入节点
- Quadtree不会插入节点或拆分
- 这是在双链表的第一个节点之后插入节点的正确方法吗?
- 在链表中的第 n 个位置插入节点
- 在链表运行时插入节点错误
- 在链表前面插入节点
- C++ 链表 - 插入节点函数不会更新函数范围之外的值
- 使用 C++ 在单向链表的指定位置插入节点时出现分段错误
- C :指针与指针指针在二进制树中插入节点
- 在链接列表C 中的某个位置插入节点
- 在双向链表中插入节点