2017-03-07 48 views
0

我给出了指向链表头节点的指针,要添加到列表中的整数以及必须插入整数的位置。 将此节点插入到所需位置后,我需要返回头节点。在链表中的特定位置插入节点

我编写的代码由于某种原因而不起作用,并进入无限循环。

class Node { 
    int data; 
    Node next; 
    } 


Node InsertNth(Node head, int data, int position) { 
    int count = 0; 
    Node node = head; 
    Node prev = null; 
    while(count != position){ 
     count++; 
     node = node.next; 
     prev = node; 
    } 

    Node newNode = new Node(); 
    newNode.data = data; 


    newNode.next = node; 
    if(count == 0){ 
      head = newNode; 
     }else{ 
      prev.next = newNode; 
    } 

    return head;   
} 
+0

提示:你的'while'循环结束后,将这个:'的System.out.println( “节点=” + node.data + “上一页=” + prev.data);'其实,你需要确保'node'和'prev'首先不为空。但是我认为如果你这样做,你将能够发现错误。 – ajb

回答

5
node = node.next; 
prev = node; 

这应该是相反的顺序

prev = node; 
node = node.next; 

并且还代码不检查许多情况下,例如,作为所指定的位置是否比的大小大链表。尝试重写代码,你也可以提到你使用哪些值来测试函数。 我认为prev=node应该抛出一个例外,因为prev未初始化

1

首先,我找到了位置。 然后通过改变指针在该位置插入新节点。

Node InsertNth(Node head, int data, int position) { 

    Node newNode= new Node(); 
    newNode.data=data; 

    Node ptr = head; 
    pos = pos - 1; 
    for (int i = 1; ; i++) { 
    if(ptr==null) 
     { break; 
      } 
     if (i == pos) { 
      newNode.next=ptr.next; 
      ptr.next=newNode; 
      break; 
     } 
     ptr = ptr.next; 
    } 
}