在“链接”列表中的特定位置插入节点

时间:2017-03-07 05:17:07

标签: java algorithm data-structures linked-list

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

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

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

3 个答案:

答案 0 :(得分:5)

node = node.next;
prev = node;

这应该是相反的顺序

prev = node;
node = node.next;

并且代码也没有检查很多情况,例如指定的位置是否大于链表的大小。尝试重写代码,也可以提一下您用于测试函数的值。 我认为prev=node应抛出异常,因为prev未初始化

答案 1 :(得分:2)

首先,我找到了这个位置。 然后通过更改指针将新节点插入该位置。

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

答案 2 :(得分:0)

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

          Node node = new Node(data);
          node.next = null;
          if (head == null && position == 0){
              head = node;
          }
          else if(head != null && position == 0){
              node.next = head;
              head = node;
          }
          Node tempCurrentNode = head ;
          Node tempPreviousNode = null;
          int index = 0;
          while (index < position) {
              tempPreviousNode =  tempCurrentNode;
              tempCurrentNode = tempCurrentNode.next;
              index = index + 1;
          }
            node.next = tempCurrentNode;
            tempPreviousNode.next = node;

         return head;
    }