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

facing problem while adding to a linked list, two seemingly identical codes are giving very different results

我在这里尝试将节点添加到单链表

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), 并检查变量的值(主要是用于调试的 F8 键)...

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

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