我在单个链表中的给定位置插入元素时遇到问题。实际上问题只是插入中间部分, 这是我的插入函数;
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++;
}
}
我的测试代码的输出是;
after insert into empty list: should be 34 34 after insert at beginning: should be 45, 34 45 34 after inserts in middle: should be 45, 72, 56, 34 45 34 56 72 after insert at end: should be 45, 72, 56, 34, 67 45 34 56 72 67
我该如何解决这个问题? 谢谢大家的帮助。
答案 0 :(得分:0)
我猜你的问题是一个家庭作业问题。我将使用家庭作业回答指南回答:
https://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions
你的while循环取决于两件事。
之后的if-elseif-else语句取决于设置prev / curr值和position参数值的while循环结果。
你必须确保while循环是正确的,然后if-elseif-else语句是正确的。
要确保while循环和以下if-elseif-else语句正确,请考虑它们在
的所有组合中是否正确链表的长度可以是0,1,...... position参数值可以是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语句针对链表长度和位置参数值的所有组合运行。设计代码时,请确保代码适用于所有组合。