【问题标题】:Single linked list in javajava中的单链表
【发布时间】:2011-03-29 18:30:54
【问题描述】:

在下面的代码中,我试图理解insertFirst() 方法中的一件事

为什么最后一个语句是first =newLink; 而不是first.next=new Link; 会不会出错?前面不是有“下一个”吗?

我知道这段代码是正确的,我知道需要在开头插入一个节点,但我需要帮助理解一个语句。

first =newLink;first.next=new Link; 不是一回事吗?

public class LinkedList {

    private Link first;

    public LinkedList()
    {
        first = null;
    }

    public boolean isEmtpy()
    {
        return(first==null);
    }

    public void insertFirst(int id, int dd)
    {
        Link newLink=new Link(id,dd);
        newLink.next=first;
        first =newLink;
    }


}

【问题讨论】:

  • 记住 first 已经为空。它没有下一个。

标签: java data-structures singly-linked-list


【解决方案1】:

不,它是正确的:列表在开头插入新链接。旧的“第一”成为新链接的“下一个”,新的链接成为新的“第一”。

【讨论】:

  • 我知道这段代码是正确的,我知道需要在开头插入一个节点,但我需要帮助理解一个语句。是第一个=newLink;和 first.next=new 链接;不是一回事吗?
  • 没有。将每个链接视为一个包含两件事的框:一个数字和指向另一个框“下一个”的指针。列表本身有一个名为“first”的指针,它指向列表的前面,然后每个节点都指向它的邻居。如果我们执行“newLink.next = first.next; first.next=newLink”,这意味着 first 指向一个框(称为“A”),然后 A 指向新链接,新链接是指向“第一个”最初指向的内容。另一方面,“newLink.next = first; first = newLink”表示first指向新链接,newLink指向A。
  • "first" 是指向第一个链接的指针——第一个框。只有盒子里有数字。
【解决方案2】:

为什么最后一个语句是first =newLink; 而不是first.next=new Link;

因为您要插入一个新的第一个元素,而“下一个”元素是旧的第一个元素,它是在上一行设置的。

是第一个=newLink;和 first.next=new 链接;不一样吗?

没有。 first 是第一个,first.next 是第二个。

【讨论】:

  • 谢谢,这是我一直在寻找的答案。主要是那一种说法。
【解决方案3】:

这是因为你要将新元素放在开头,所以你必须将新元素设置为列表的头部,并且该元素应该指向“旧头”,然后你有:

new_elemnt->old_head->...

【讨论】:

    【解决方案4】:

    LinkedList::first 不是保护元素。它确实指向列表的第一个元素。如果LinkedList::first == null,则列表为空。如果Link::next == null,则它是最后一个元素(在这种情况下,null 称为保护元素)。

    【讨论】:

      【解决方案5】:

      Java 中 SingleLinkedList 的简单示例

          package com.ds;
      
          public class SingleLinkedList {
      
      
              private Node head;
      
              public static void main(String[] args) {
                  SingleLinkedList linkedList = new SingleLinkedList();
                  linkedList.insert(5);
                  linkedList.insert(15);
                  linkedList.insert(45);
                  linkedList.insert(55);
                  linkedList.insert(58);
                  linkedList.insert(25);
      
                  // Print value of Single Linked list.
                  linkedList.print();
                  // delete node from tail side.
                  linkedList.delete();
                  linkedList.delete();
                  linkedList.delete();
                  linkedList.delete();
                  linkedList.delete();
                  /*linkedList.delete();
                  linkedList.delete();
                  linkedList.delete();
                  linkedList.delete();*/
                  linkedList.print();
      
              }
      
              SingleLinkedList() {
                  head = null;
              }
      
              void insert(int val) {
                  Node temp = new Node();
                  temp.data = val;
                  temp.next = null;
                  if (head == null) {
                      head = temp;
                  } else {
                      Node k = head;
                      while (k.next != null) {
                          k = k.next;
                      }
                      k.next = temp;
                  }
              }
      
              // delete from tail.
              void delete() {
                  // if it's first node
                  if (head == null || head.next == null) {
                      head = null;
                  } else {
                      Node n = head;
                      Node t = head;
                      while (n.next != null) {
                          t = n;
                          n = n.next;
                      }
                      t.next = null;
                  }
      
              }
      
              void print() {
                  Node k = head;
                  while (k != null) {
                      System.out.println(k.data);
                      k = k.next;
                  }
              }
      
             Node reverse() {
                  Node h = head;
                  Node p = null;
                  Node t = null;
                  while (h != null) {
                      t = h.next;
                      h.next = p;
                      p = h;
                      h = t;
                  }
                  return p;
              }
      
              class Node {
                  private int data;
                  private Node next;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2022-11-15
        • 1970-01-01
        • 2012-06-18
        相关资源
        最近更新 更多