簡體   English   中英

在第一個 position 插入元素時返回不正確的鏈接列表

[英]Incorrect Linked List being returned when inserting element at first position

我是一名初學者,並且正在練習在第一個 position 插入節點的程序,此時鏈表中已經存在多個元素。 這是我的代碼片段

class LinkedList{
    int data;
    LinkedList next;

    void insertNodeAtTheEnd(int d, LinkedList head){
        LinkedList temp;
        temp = head;
        while(temp.next != null){
            temp = temp.next;
        }
        LinkedList newNode = new LinkedList();
        newNode.data = d;
        newNode.next = null;
        temp.next = newNode;
    }

    void insertNodeAtGivenPosition(int d , int pos , LinkedList head){
        LinkedList temp;
        temp = head;
        int tempPos = 1;
        LinkedList newNode = new LinkedList();
        LinkedList before = temp;
        if(pos == 1){

            newNode.data = d;
            newNode.next = temp;
            temp = newNode;     
        }
        else { 
            while(temp != null){
                if(pos == tempPos){
                    newNode.data = d;
                    newNode.next = before.next ;
                    before.next = newNode;
                }

                before = temp ;
                temp = temp.next ;
                tempPos++;
            }   
        }   
    }

    void printLinked(LinkedList head){
        LinkedList temp = head;
        while(temp.next != null){
            System.out.print(temp.data + "->");
            temp = temp.next;
        }
        System.out.print(temp.data +"\n");
    }

}

class LinkedListMain{
    public static void main(String[] args){

        LinkedList node1 = new LinkedList();
        node1.data = 10;
        node1.next = null;

        LinkedList head;
        head = node1;

        head.insertNodeAtTheEnd(8, head);
        head.insertNodeAtTheEnd(6, head);
        head.insertNodeAtTheEnd(7, head);
        head.insertNodeAtTheEnd(11, head);
        head.insertNodeAtTheEnd(5, head);
        head.insertNodeAtTheEnd(2, head);
        head.printLinked(head);
        head.insertNodeAtGivenPosition(4 , 3 , head);  //line 1
        head.printLinked(head);
        head.insertNodeAtGivenPosition(1 , 1 , head);  //line2
        head.printLinked(head);             
    }
}

對於上面的代碼,使用方法“insertNodeAtGivenPosition()”在第三個 position(第 1 行)插入元素后,代碼工作正常,output 如下所示

10->8->6->7->11->5->2
10->8->4->6->7->11->5->2

但是當我嘗試使用相同的邏輯在第一個位置(第 2 行)插入元素並打印列表時,第一個元素沒有插入並且 output 看起來像

10->8->6->7->11->5->2
10->8->4->6->7->11->5->2
10->8->4->6->7->11->5->2

我究竟做錯了什么? “head”的值似乎存在一些問題。

為了在開頭插入,您必須更改head以引用新節點。 但是, head被傳遞給你的方法,它不能改變它。

為了使它起作用,您需要返回新的head

LinkedList insertNodeAtGivenPosition(int d , int pos , LinkedList head){
    LinkedList temp;
    temp = head;
    int tempPos = 1;
    LinkedList newNode = new LinkedList();
    LinkedList before = temp;
    if(pos == 1) {
        newNode.data = d;
        newNode.next = head;
        head = newNode;     
    } else { 
        while(temp != null){
            if(pos == tempPos){
                newNode.data = d;
                newNode.next = before.next;
                before.next = newNode;
            }

            before = temp;
            temp = temp.next;
            tempPos++;
        }   
    }   
    return head;
}

方法調用應該是:

head = head.insertNodeAtGivenPosition(1 , 1 , head);

當然,你不需要head參數,因為它是一個實例方法,所以你可以把它改成:

LinkedList insertNodeAtGivenPosition(int d , int pos) {
    LinkedList head = this;
    LinkedList temp = head;
    int tempPos = 1;
    LinkedList newNode = new LinkedList();
    LinkedList before = temp;
    if(pos == 1){
        newNode.data = d;
        newNode.next = head;
        head = newNode;     
    } else { 
        while(temp != null) {
            if(pos == tempPos){
                newNode.data = d;
                newNode.next = before.next ;
                before.next = newNode;
            }

            before = temp ;
            temp = temp.next ;
            tempPos++;
        }   
    }   
    return head;
}

並調用它:

head = head.insertNodeAtGivenPosition(1 , 1);

暫無
暫無

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

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