【发布时间】:2016-02-28 23:31:56
【问题描述】:
我在将元素插入单个链表中的给定位置时遇到问题。其实问题只是插入到中间部分, 这是我的插入函数;
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++;
}
}
我的测试代码的输出是;
插入空列表后:应该是 34 34 在开头插入之后:应该是 45, 34 45 34 在中间插入之后:应该是 45, 72, 56, 34 45 34 56 72 在末尾插入后:应为 45、72、56、34、67 45 34 56 72 67我该如何解决这个问题? 谢谢大家的帮助。
【问题讨论】:
-
首先尝试先在纸上弄清楚,然后尝试使用您在纸上提出的算法重新实现该功能。然后,如果您遇到问题,请学习如何使用调试器,并逐行浏览代码以查看它的作用。
-
另外,请尝试创建一个Minimal, Complete, and Verifiable Example,您可以向我们展示,其中包括您如何调用该函数以及使用什么值。
-
您是否始终如一地使用索引库?从外观上看,位置 0 和位置 1 都会插入到列表的头部,这是一个奇怪的设计决定。
标签: c++ insert linked-list