请看下面的代码,让我知道它有什么问题?我正在尝试在链表中的给定特定位置插入节点。我们需要在插入后返回对头节点的引用。
Node InsertNth(Node head, int data, int position) {
Node newNode = new Node();
newNode.data = data;
if(head==null){
newNode.next = head;
return newNode;
}
Node first = head;
while(position > 0 && head.next!=null){
head = head.next;
position -= 1;
}
newNode.next = head;
head = newNode;
return first;
}
是的,有问题。在while
循环之后,您正在尝试在head
之前插入newNode
,但这不起作用。线路head=newNode;
是没有用的。
要么你需要另一个指针在head
之前指向节点,以便你可以在这两个指针之间插入newNode
,要么你需要在一步之前停止while
循环,并在head
之后插入newNode
。这是第二个解决方案:
while(position > 1 && head.next!=null){ //0 is replaced by 1 here
head = head.next;
position -= 1;
}
newNode.next = head.next;
head.next = newNode;
return first;
[编辑]
在此解决方案中,您需要通过在while
循环之前添加以下代码来处理position
等于 0 的特殊情况:
if(position==0) {
newNode.next = head.next;
return newNode;
}