我正在尝试将新元素插入用户创建的链接列表的尾部。解决方案1失败,但解决方案2工作,我无法弄清楚原因:
class Node {
int data;
Node next;
}
解决方案1:
Node Insert(Node head,int data) {
if(head == null) {
head = new Node();
head.data = data;
head.next = null;
} else {
Node elem = head;
while(elem != null) {
elem = elem.next;
}
elem = new Node();
elem.data = data;
elem.next = null;
}
return head;
}
解决方案2:
Node Insert(Node head,int data) {
if(head == null) {
head = new Node();
head.data = data;
head.next = null;
} else {
Node elem = head;
while(elem.next != null) {
elem = elem.next;
}
elem.next = new Node();
elem = elem.next;
elem.data = data;
elem.next = null;
}
return head;
}
答案 0 :(得分:2)
在解决方案1中,您将导航列表,直到您点击空,然后您创建一个新的Node
,该列表中的任何内容都没有引用它:
Node elem = head;
while(elem != null) {
elem = elem.next;
}
elem = new Node();
此最终作业不会更改列表中的任何元素。因此,您的新Node
未加入列表。
在解决方案2中,当您到达最后一个现有Node
(其next
引用为空)时,您将新Node
添加为其next
参考:
Node elem = head;
while(elem.next != null) {
elem = elem.next;
}
elem.next = new Node(); /* This adds the node after the last node */
这是有效的,因为新的Node
被列表中的现有元素引用。
答案 1 :(得分:0)
当while循环结束时,您最终会进入链表的最后一个元素。第一个解决方案只是覆盖最后一个元素,而是需要转到下一个elem(elem.next),然后添加数据,这是你在第二个解决方案中所做的
答案 2 :(得分:-1)
似乎在您的第一个解决方案中,您通过迭代遍历列表中的最后一个元素。虽然最后一个元素是变量" elem"你创建一个新元素分配给同一个" elem"导致你丢失最后一个元素的变量。