簡體   English   中英

Java中的單鏈表

[英]Single linked list in java

在下面的代碼中,我試圖了解insertFirst()方法中的一件事,

為什么最后一個語句first =newLink; 而不是first.next=new Link; 會錯嗎? 首先沒有“下一個”嗎?

我知道這段代碼是正確的,而且我知道需要在開頭和所有位置插入一個節點,但是我需要幫助來理解一個語句。

first =newLink;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 =newLink; 而不是first.next=new Link;

因為要插入一個新的第一個元素,而“ next”元素是舊的第一個元素,所以該元素在上一行設置。

首先是= newLink; 和first.next = new鏈接; 不一樣的東西嗎?

first是第一和first.next是第二。

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;
        }
    }

這是因為您想將新元素放在開頭,因此必須將新元素設置為列表的開頭,並且該元素應指向“ old-head”,然后您將具有:

new_elemnt->old_head->...

LinkedList::first不是保護元素。 它確實指向列表的第一個元素。 如果LinkedList::first == null ,則列表為空。 如果Link::next == null ,則它是最后一個元素(在這種情況下, null稱為保護元素 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM