我正在尝试将新节点插入链接列表,以便新节点始终插入两个节点之间,这两个节点已经在列表中。这是我的方法:
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());
}
}
答案 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是否解决了这个问题