【发布时间】:2015-12-29 05:23:33
【问题描述】:
我目前正在研究面试准备的链接列表,如果有人能对此有所了解,我将不胜感激。 C 中的以下函数应该在某个 Element elem 之后将一个新元素插入到列表中(作为参数传递给函数):
bool insertAfter(Element * elem, int data){
Element * newElem, * curPos = head;
newElem->data = data;
while(curPos){
if(curPos == elem){
newElem->next = curPos->next;
curPos->next = newElem;
return true;
}
curPos = curPos->Next;
}
return false;
}
虽然我正在学习的教科书中指定了上述内容,但我尝试提出一个不使用任何迭代的解决方案:
bool insertAfter(Element * elem, int data){
Element * newElem;
newElem->next = elem->next
newElem->data = data
elem->next = newElem;
return true;
}
但是,由于它看起来过于简单,我感觉它可能不起作用,但不知道为什么。我需要一些关于为什么这可能会或可能不会起作用的技术细节,谢谢。
【问题讨论】:
-
newElem未初始化。 -
您在不使用 head 的情况下插入链表。您可以使用递归而不是迭代。
-
迭代是必要的,因为您需要元素的链接,之后您要添加新元素。您的程序在开头添加元素,甚至没有重新定位头指针。因此它是无用的.
-
insertAfter的第一个版本在继续插入之前会检查elem是否确实在列表中,而你的没有......但你的设计更好 -
请注明书本以及可以找到该 sn-p 的位置:因为它给出了不初始化 newElem 的示例,所以它可能是一本避免使用的书。
标签: c algorithm linked-list singly-linked-list