[英]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.