在给定位置 c++ 中插入节点
Inserting a node in the given position c++
>我在单个链表中的给定位置插入元素时遇到问题。实际上问题仅在插入中间部分,这是我的插入功能;
void SimpleList::insert (const ItemType & item, int position){
Node* prev = NULL;
Node* curr = NULL;
Node* newNode = new Node();
newNode->data = item;
int tempPos = 0;
curr = head;
if(head != NULL){
while(curr->next != NULL && tempPos != position)
{
prev = curr;
curr = curr->next;
tempPos++;
}
if(position==1)
{
newNode->next=head;
head=newNode;
size++;
}
else if(curr->next == NULL)
{
curr->next = newNode;
last = newNode;
newNode->next= NULL;
size++;
}
else
{
prev->next = newNode;
newNode->next = curr;
size++;
}
}
else {
last = head = newNode;
last->next = NULL;
size++;
}
}
我的测试代码的输出是;
插入空列表后:应为 3434 开头插入后:应为 45、3445 34 中间插入后:应为45、72、56、3445 34 56 72 在末尾插入后:应为 45、72、56、34、6745 34 56 72 67
我该如何解决这个问题?谢谢大家的帮助。
我想你的问题是家庭作业问题。 我将使用家庭作业回答指南来回答:
https://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions
您的 while 循环取决于 2 件事。
- 链表的长度,用于设置 prev/curr 的值
- 位置参数值
之后的 if-elseif-else 语句取决于设置 prev/curr 值和位置参数值的 while 循环结果。
你必须确保while循环是正确的,然后,if-elseif-else语句是正确的。
为了确保 while 循环和以下 if-elseif-else 语句是正确的,请考虑它们在所有组合中是否正确
- 链表的长度,用于设置 prev/curr 的值
- 位置参数值
链表的长度可以是 0、1、...位置参数值可以是 0、1、...
当 length=1,position=0 时,while 循环不迭代,并且程序执行else if(curr->next == NULL)
,结果链表的新节点位于原始的第一个节点之后。
当 length=1, position=1, while 循环不迭代,并且程序执行if(position==1)
,结果链表的新节点位于原始第一个节点之前。
当 length=2,position=0 时,while 循环不迭代,程序执行else
。 prev=NULL
,因此prev->next
会导致分割错误。
当 length=2, position=1 时,while 循环迭代一次,程序执行if(position==1)
. 生成的链表具有位于原始第一个节点之前的新节点。
当 length=2, position=2 时,while 循环迭代一次,程序执行else if(curr->next == NULL)
. 生成的链表将新节点放在原始第二个节点之后。
上述情况显示了 while 循环和以下 if-elseif-else 语句导致链表可能不正确的情况。
为了解决这个问题,请考虑如何设计 while 循环和 if-elseif-else 语句,以便对于链表长度和位置参数值的所有组合,程序将在正确的位置插入新节点。
我不太确定在开头插入、在中间插入和在结尾插入的位置参数值。 在查看我的答案后,您可能需要自己验证链表状态。
while 循环和 if-elseif-else 语句中的代码针对链表长度和位置参数值的所有组合运行。 设计代码时,请确保代码适用于所有组合。
- 在具有开放寻址的哈希表中插入节点 [优化逻辑]
- 使用代码块在链表的开头插入节点
- 使用 C++ 在 BTree 中递归插入节点
- 在单链表中的后端插入节点
- 在索引中插入节点:链接列表未正确返回列表
- 以分类方式插入节点时遇到麻烦
- 链表,在尾部后面插入节点
- 在 BST 中插入节点时出现逻辑错误
- 简单树插入节点函数显示为空
- 在链表的末尾插入节点
- Quadtree不会插入节点或拆分
- 这是在双链表的第一个节点之后插入节点的正确方法吗?
- 在链表中的第 n 个位置插入节点
- 在链表运行时插入节点错误
- 在链表前面插入节点
- C++ 链表 - 插入节点函数不会更新函数范围之外的值
- 使用 C++ 在单向链表的指定位置插入节点时出现分段错误
- C :指针与指针指针在二进制树中插入节点
- 在链接列表C 中的某个位置插入节点
- 在双向链表中插入节点