3

打印firstnode地址后,它会打印last node地址,所以如果我想显示我的地址,我 Linked List该怎么办?

请给出有效的解决方案

public class LLink {
    public Link first, last, tmp;

    public void add(int data) {
        Link newLink = new Link(data);
        if (first == null) {
            first = newLink;
            System.out.println(first.data);
            System.out.println(newLink);
        } else {
            first.next = newLink;
            // first=newLink;
            System.out.println(newLink.data);
            // newLink = newLink.next;
            // newLink.next=newLink;
            last = newLink;

        }
        // newLink.next=first;//it copies the address of old first
        // last=newLink;
        System.out.println("end");
        System.out.println(last);
    }

    public void delete() {
        Link tmp = first;
        first = first.next;
        System.out.println(first.data);

    }

    public void display() {
        System.out.println("display");
        Link e = first;
        while (e != null) {
            System.out.println(e.data);
            System.out.println(e);
            System.out.println("first-next" + first.next);
            System.out.println(e.next);
            e = e.next;
        }

    }

    class Link {
        public int data;
        public Link next;

        public Link(int data) {
            this.data = data;
        }

    }
}
4

1 回答 1

1

你的 add 函数有问题,而不是你的 display 函数。

public void add(int data) {
    Link newLink = new Link(data);
    if (first == null) {
        first = newLink;
        System.out.println(first.data);
        System.out.println(newLink);
    } else {
        first.next = newLink; // <-- This is wrong
        // first=newLink;
        System.out.println(newLink.data);
        // newLink = newLink.next;
        // newLink.next=newLink;
        last = newLink;

    }
    // newLink.next=first;//it copies the address of old first
    // last=newLink;
    System.out.println("end");
    System.out.println(last);
}

添加到链表时,应该添加到最后一个节点,而不是从第一个节点更改下一个指针。您已经有效地创建了一个两节点列表,每次添加节点时都会更改最后一个节点。

相反,你应该有类似的东西:

public void add(int data) {
    Link newLink = new Link(data);
    if (first == null) {
        first = last = newLink;
    } else {
        last.next = newLink; // First set the next pointer of the last node to the new node
        last = newLink; // Once the pointer is set, now set last node properly
    }
}
于 2013-06-19T06:09:35.197 回答