在两个节点之间插入新节点,这两个节点已经在链接列表中

时间:2014-05-11 19:25:26

标签: java data-structures insert linked-list

我正在尝试将新节点插入链接列表,以便新节点始终插入两个节点之间,这两个节点已经在列表中。这是我的方法:

public void insertAfter(ListNode after,Object x){
    if (head.next==null)
        insertFront(x);
    else {
        ListNode tmp=new ListNode(x,after.next);
        after=tmp;}
        size++;
    }  

但是当我将此方法称为 list.insertAfter(list.head.next," 0"); 时没有任何反应。出了什么问题在这里。我看不出有什么不妥。有人请指出为什么这不起作用。 这是完整的代码:

public class Linked{
    private ListNode head;
    private int size;
    public Linked(){
        head=null;
        size=0;
    }
    // public void insertFront(Object item){
        // head=new ListNode(item,head);    
        // size++;
// }


public void removeFromHead(){
    if(head==null)
        return;
    if(head.next==null)
        head=null;
    else{
    head=head.next;
    }
}
public void removeFromEnd(){
if (head==null)
    return;
if(head.next==null)
    removeFromHead();
else{
    ListNode current=head;
    while(current.next.next!=null)
        current=current.next;
    current.next=null;

}
}
public void removeNext(ListNode current){
if(current==null)
    removeFromHead();
else if(current.next.next==null)
    removeFromEnd();
else current.next=current.next.next;
}
public String toString() {
    String result = " ";
    ListNode a=head;
    result+=a.item;
    while (a.next!=null){
        result +=" "+a.next.item;
        a=a.next;
    }

    return result;
}
public void insertFront(Object x){
    if(head==null)
            head=new ListNode(x);
    else 
        head=new ListNode(x,head);
    size++;
}
public void insertEnd(Object item){
if (head==null){ head=new ListNode(item);
}else{
    ListNode current=head;
    while(current.next!=null){
        current=current.next;
    }
    current.next=new ListNode(item);

    size++;}
}

public void insertAfter(ListNode after,Object x){
if (head.next==null)
    insertFront(x);
else {
    ListNode tmp=new ListNode(x,after);
    after=tmp;}
    size++;
}


public static void main (String args[]){
 Linked list=new Linked();
list.insertFront("a");
list.insertFront("c");
list.insertFront("d");
list.insertEnd("b");


list.insertAfter(list.head,"0");
System.out.println(list.toString());

}

}

1 个答案:

答案 0 :(得分:1)

让我试着帮助你。 首先,节点可以用3种方式表示。 1)整个节点(内存地址) 2)Node.data表示的Node中的数据 3)由Node.link

表示的节点中的链接

因此,在编程之前,请始终在纸上尝试您想要的东西。所以我们走了 节点A节点新节点B.   __ __ __  |的 | | | |的 |  | | |的 | | |

Intially 现在A.link = B

结束结果 我们想要A.link = New New.Link = B

首要的是 首先让我们将B.link值存储在B.link中(通过这样做,两者都指向Node B,我们不会丢失B的内存地址,我们也可以使用temp Node,但正如您在此处看到的那样,它不是必需的。)

然后让我们存储A.link = New(现在A指向新点和新点B)

我希望很清楚。 如果你想在第一个和第二个节点之间插入你的问题,你必须传递第一个节点,但是你要传递第二个节点。看看list.head是否解决了这个问题