简体   繁体   English

在第一个 position 插入元素时返回不正确的链接列表

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

I am a beginner and was practicing a program on Insertion of a node at the first position when several elements are already present in the linked list.我是一名初学者,并且正在练习在第一个 position 插入节点的程序,此时链表中已经存在多个元素。 Here is my code snippet这是我的代码片段

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

For the above code, after inserting element at third position (line 1) using method "insertNodeAtGivenPosition()", the code works fine and the output is shown below对于上面的代码,使用方法“insertNodeAtGivenPosition()”在第三个 position(第 1 行)插入元素后,代码工作正常,output 如下所示

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

But when I try to use the same logic to insert element at first position(line 2) and print the list, the first element is not inserted and the output looks like但是当我尝试使用相同的逻辑在第一个位置(第 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

What am I doing wrong?我究竟做错了什么? There seem to be some issue with the value of "head". “head”的值似乎存在一些问题。

In order to insert at the beginning, you have to change head to reference the new node.为了在开头插入,您必须更改head以引用新节点。 However, head is passed to your method, which cannot change it.但是, head被传递给你的方法,它不能改变它。

In order for this to work, you'll need to return the new 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;
}

And the method call should be:方法调用应该是:

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

Of course, you don't need the head argument, since it's an instance method, so you can change it to:当然,你不需要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;
}

and call it with:并调用它:

head = head.insertNodeAtGivenPosition(1 , 1);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM