在添加到链表时遇到问题,两个看似相同的代码给出了截然不同的结果



我在这里试图将节点添加到单链接列表

SinglyLinkedListNode s = new SinglyLinkedListNode(data);
if(head == null){SinglyLinkedList a = new SinglyLinkedList();
a.head = s;
return a.head;}
else{
SinglyLinkedListNode a = head;
while(head.next != null){
head = head.next;}
head.next = s;
return a;
}

这个有效,但如果我这样做-

SinglyLinkedListNode s = new SinglyLinkedListNode(data);
if(head == null){SinglyLinkedList a = new SinglyLinkedList();
a.head = s;
return a.head;}
else{
SinglyLinkedListNode a = head;
while(head != null){
head = head.next;}
head = s;
return a;
}

列表现在只包含一个节点

在您的第一个代码中,while循环在head.next != null时终止,终止后头将指向链表中的最后一个节点,当您执行head.next = s时,它将向现有列表添加新节点。

在第二个代码中,while循环在head == null时终止,终止后头将指向null。所以现在您正在分配head = s,所以头将指向新创建的节点,并且它不会附加到您的原始列表中。

通过一步一步的调试应该很简单,我想这就是学习它的方法……尝试在while循环和下一行放置断点(直接将值分配给head(,并检查变量的值(主要是用于调试的F8键(。。。

最新更新