在链接列表(Java)中插入值时遇到问题?

时间:2018-09-03 02:51:40

标签: java linked-list


    嗨,我对Java中的LinkedLists相当陌生,在将值插入到链表中时遇到了麻烦。该程序编译成功,我只能在链接列表中添加一些数字。如果有人解释为什么会发生这种情况以及解决该问题的解决方案,将会有所帮助。


class LNode {
    int data;
    LNode next;
    public LNode(int data)
    {
        this.data=data;
    }
}

class linkedList {
    LNode head; // initialize head.

    // methods
    public void append(int data) {

        if(head==null) {
            head= new LNode(data);
            return;
        }
        LNode temp = head;
        while(temp.next!=null) {
            temp=temp.next; 
        }
        temp = new LNode(data);
    }

    public void prepend(int data) {
        LNode temp=new LNode(data);
        temp.next=head;
        head=temp;      
    }

    public void DelteValue(int data) {
        if(head==null)
            return;
        if(head.data==data) {
            head=head.next;
            return;
        }
        LNode current=new LNode(data);
        while(current.next!=null) {
            if(current.next.data==data) {
                current.next=current.next.next;
                return;
            }
            current=current.next;
        }

    }
    public void show() {
        LNode temp= head;
        while(temp.next!=null) {
            System.out.println(temp.data);
            temp=temp.next;
        }
    }

}

public class LinkedLists {

    public static void main(String[] args) {
        linkedList LL=new linkedList();
        LL.append(5);
        LL.append(15);
        LL.append(25);
        LL.prepend(1);
        LL.prepend(12);
        LL.prepend(22);

        LL.show();

    }
}

请看一下并发布解决方案(如果可能)? 多谢。


2 个答案:

答案 0 :(得分:0)

您的append()方法中的逻辑不正确。遍历到列表的末尾后,您需要在最后一个位置插入新节点:

public void append(int data) {

    if (head == null) {
        head = new LNode(data);
        return;
    }

    LNode temp = head;
    while (temp.next != null) {
        temp = temp.next;
    }
    temp.next = new LNode(data);
}

您的prepend()方法看起来不错。我没有测试您的删除方法,它也可能有问题。该答案直接解决了您上面的要求。

答案 1 :(得分:0)

它在您的append方法中

LNode temp = head;
while(temp.next!=null) {
   temp=temp.next; 
}
temp = new LNode(data);

while循环结束时,temp指向列表中的最后一个东西。但是随后您将其与下一行的作业一起丢弃。应该是

temp.next = new LNode(data);