如何在链表中的第n个位置插入节点

时间:2016-04-08 11:13:49

标签: java data-structures linked-list

我是编程初学者。我试图在java中实现链表我试图写函数在第n个位置插入元素但是它没有正常工作它在该位置之前没有显示数据。这对你来说似乎是愚蠢的问题或错误,但因为我是初学者,所以你的答案会有所帮助,我们将不胜感激。

先谢谢。

守则如下。

class Node{
int data;
Node next;
Node(){
    data=0;
    next=null;
}
}

class LinkedList{
Node head;
LinkedList(){
    head=null;
}

   void pushB(int item){
       Node temp=new Node();
       temp.data=item;
       temp.next=null;
        if(head==null){
        head=temp;    
        }
        else{
            temp.next=head;
            head=temp;
        }
    }

    void pushnth(int item, int pos){

     Node cur=new Node();
     cur.data=item;
     cur.next=null;
     Node temp=head;
     int i=0;

     while(i<pos-1){
         temp=temp.next;
         i++;
     }
     cur.next=temp;
     head=cur;
    }

    void print(){
        if(head==null){
            System.out.println("List empty");
        }

        else{
            Node temp=head;
            while(temp!=null){
                System.out.println(temp.data);
                temp=temp.next;
            }
        }
    }
}


public class MyFirstJavaProgram {

public static void main(String []args) {
   System.out.println("Hello World");

   LinkedList l1=new LinkedList();

   l1.pushB(90);
   l1.pushB(80);
   l1.pushB(70);
   l1.pushB(60);
   l1.pushB(50);
   l1.pushB(30);
   l1.pushB(20);
   l1.pushB(10);
   l1.pushnth(40,4);
   l1.print();
}
} 

3 个答案:

答案 0 :(得分:1)

您的pushnth方法会更改列表的head,因此会丢弃新元素之前的所有元素。

要在列表中间添加元素,您必须设置2个链接。

新节点应指向您在此处执行的下一个链接:

cur.next=temp;

temp之前的节点应链接到新节点。这是你缺少的部分。

这样的事情应该有效:

void pushnth(int item, int pos){

    Node cur=new Node();
    cur.data=item;
    Node temp=head;
    int i=0;

    while(i<pos-2){ // note that I changed the end condition
        temp=temp.next;
        i++;
    }
    // the new node is placed between temp and temp.next
    cur.next = temp.next;
    temp.next = cur;
}

请注意,此代码缺少一些验证。例如,如果链表中的元素太少,则此代码将失败,因此应添加一些额外的检查。

答案 1 :(得分:0)

// please this is the correct add Node in position. 
public static Node addAtPosition(Node head3, int position) {
    // add node contains 0 in its data
    Node nodeAddAtPosition = new Node(1000);
    Node temp = head3;
    if (position == 0) {
        // add node contains 1000 in its data

        nodeAddAtPosition.next = head3;// assigning addFront next to head
        head3 = nodeAddAtPosition; // we need to return head assigning head to front.


    } else {
        for (int i = 1; i < position; i++) {
            System.out.print(i);
            temp = temp.next;
        }
        nodeAddAtPosition.next = temp.next;
        temp.next = nodeAddAtPosition;


    }
    return head3;// return head
}

答案 2 :(得分:0)

您必须区分插入新项目的情况:

void pushnth(int item, int pos){

     Node cur=new Node();
     cur.data=item;
     if (pos == 0) {
         cur.next = head;
         head = cur;
     } else {
         Node temp=head;
         for (int i=1; i<pos; ++i) {
            temp=temp.next;
         }
         cur.next = temp.next;
         temp.next = cur;
      }
    }