【发布时间】:2015-05-02 01:45:59
【问题描述】:
好的,所以我正在使用 Java 中的链表。我试图理解为什么我的 deleteNode 方法不删除头节点。它适用于其他节点。
方法如下
Node deleteNode(Node head, int d){
Node n = head;
if(n.data == d){
return head.next;
}
while(n.next != null){
if(n.next.data == d){
n.next = n.next.next;
return head;
}
n = n.next;
}
return head;
}
示例输入:
Node ll = new Node(1);
ll.appendToTail(2);
ll.appendToTail(3);
当我调用我的方法时
ll.deleteNode(ll, 2);
然后打印当前节点,我得到正确的输出1->3,但是当我使用该方法删除初始节点或头部时
ll.deleteNode(ll, 1);
我得到输出 1->2->3,但我期望 2->3,其中 2 成为新的头。下面是整个实现,以防万一
public class Node {
Node next = null;
int data;
public Node(int d){
data = d;
}
void appendToTail(int d){
Node end = new Node(d); //Item to append to the end
Node n = this; //To access Class object next
while(n.next != null){
n = n.next;
}
n.next = end;
}
Node deleteNode(Node head, int d){
Node n = head;
if(n.data == d){
return head.next;
}
while(n.next != null){
if(n.next.data == d){
n.next = n.next.next;
return head;
}
n = n.next;
}
return head;
}
void printNodes(){
Node n = this;
while(n.next != null){
System.out.println(n.data);
n = n.next;
}
System.out.println(n.data); //print out the last node
}
//For fun, to simulate how python print's a list
// printed example [1, 2, 3]
void listNodes(){
Node n = this;
StringBuilder sb = new StringBuilder();
sb.append("[");
while(n.next != null){
sb.append(n.data).append(", ");
n = n.next;
}
sb.append(n.data);
sb.append("]");
System.out.println(sb.toString());
}
}
【问题讨论】:
标签: java linked-list