在第一个位置插入元素时返回错误的链接列表

问题描述 投票:0回答:1

我是初学者,正在练习一个程序,当链表中已经存在多个元素时,该程序将在第一个位置插入节点。这是我的代码段

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()”在第三位置(第1行)插入元素后,代码工作正常,输出如下所示

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

但是当我尝试使用相同的逻辑在第一个位置(第2行)插入元素并打印列表时,未插入第一个元素,并且输出看起来像]]

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

我做错了什么? “ head”的值似乎存在一些问题。

我是初学者,正在练习一个程序,当链表中已经存在多个元素时,该程序将在第一个位置插入节点。这是我的代码段类LinkedList {...

java linked-list singly-linked-list
1个回答
0
投票

为了开始插入,必须更改head以引用新节点。但是,head被传递给您的方法,该方法无法更改。

© www.soinside.com 2019 - 2024. All rights reserved.