Единый связанный список в Java - PullRequest
0 голосов
/ 29 марта 2011

В следующем коде я пытаюсь понять одну вещь в методе 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;
    }


}

Ответы [ 5 ]

3 голосов
/ 29 марта 2011

Нет, все верно: в начале списка добавляются новые ссылки. Старый «first» становится новой ссылкой «next», а новая ссылка - новой «first».

2 голосов
/ 29 марта 2011

Почему последнее утверждение first =newLink;, а не first.next=new Link;

Поскольку вы вставляете новый первый элемент, а следующий элемент - это старый первый элемент, который был установлен в предыдущей строке.

Is first = newLink; и first.next = новая ссылка; не одно и то же?

Нет. first является первым, а first.next - вторым.

0 голосов
/ 29 августа 2017

Простой пример SingleLinkedList в Java

    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;
        }
    }
0 голосов
/ 29 марта 2011

LinkedList::first не является защитным элементом.Это действительно указывает на первый элемент списка.Если LinkedList::first == null, то список пуст.Если Link::next == null, то это последний элемент (в данном случае null называется защитным элементом ).

0 голосов
/ 29 марта 2011

Это потому, что вы хотите поместить новый элемент в начало, поэтому вы должны установить новый элемент в начало списка, и этот элемент должен указывать на "old-head", и тогда вы получите:

new_elemnt->old_head->...
...