无法从链表中删除第一个节点 class
Cannot delete the first node from Linked List class
我有一个问题。我正在使用 Cracking the Coding Interview 教科书来练习有关链表的一些面试问题,并在解决问题之前尝试实现自己的 LinkedList 数据结构。我试图测试 class 的功能。其他一切都很好,但我不知道如何删除 LinkedList 的第一个节点。
在弄清楚我自己的实现后,代码不起作用,我尝试了 CTCI 书中的代码,但无济于事。下面是我的链表数据结构代码:
static class Node{
Node next = null;
int data;
public Node(int d) {
data = d;
}
void appendToTail(int d) {
Node end = new Node(d);
Node n = this;
while(n.next != null) {
n = n.next;
}
n.next = end;
}
Node deleteNode(Node head, int d) {
if(head == null) return null;
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;
}
int size () {
int length = 0;
Node n = this;
if(n == null) {
return 0;
}
length = 1;
while(n.next != null) {
n = n.next;
length++;
}
return length;
}
void printNode() {
Node d = this;
while(d != null) {
if(d.next != null) {
System.out.print(d.data + " --> ");
} else {
System.out.println(d.data + " ");
}
d = d.next;
}
}
}
我想知道为什么我能够删除除第一个节点以外的所有其他节点。
我确实设置了以下测试用例:
public static void main(String[] args) {
//test cases
Node test = new Node(0);
for(int i = 1; i <= 20; i++) {
test.appendToTail(i);
}
test.printNode();
for(int i = 0; i <= 20; i = i + 2) {
test.deleteNode(test, i);
}
test.printNode();
}
删除所有偶数节点后我收到的输出是 0 --> 1 --> 3 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19
但我的预期输出是 1 --> 3 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19
.
问题是,当删除链表中的第一个元素时,您正在发送 head.next 但您没有在测试变量中使用它。
代码应该是
public static void main(String[] args) {
//test cases
Node test = new Node(0);
for(int i = 1; i <= 20; i++) {
test.appendToTail(i);
}
test.printNode();
for(int i = 0; i <= 20; i = i + 2) {
test = test.deleteNode(test, i);
}
test.printNode();
}
添加这个
test = test.deleteNode(test, i);
那么结果就是
0 --> 1 --> 2 --> 3 --> 4 --> 5 --> 6 --> 7 --> 8 --> 9 --> 10 --> 11 --> 12 --> 13 --> 14 --> 15 --> 16 --> 17 --> 18 --> 19 --> 20
3 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19
我有一个问题。我正在使用 Cracking the Coding Interview 教科书来练习有关链表的一些面试问题,并在解决问题之前尝试实现自己的 LinkedList 数据结构。我试图测试 class 的功能。其他一切都很好,但我不知道如何删除 LinkedList 的第一个节点。
在弄清楚我自己的实现后,代码不起作用,我尝试了 CTCI 书中的代码,但无济于事。下面是我的链表数据结构代码:
static class Node{
Node next = null;
int data;
public Node(int d) {
data = d;
}
void appendToTail(int d) {
Node end = new Node(d);
Node n = this;
while(n.next != null) {
n = n.next;
}
n.next = end;
}
Node deleteNode(Node head, int d) {
if(head == null) return null;
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;
}
int size () {
int length = 0;
Node n = this;
if(n == null) {
return 0;
}
length = 1;
while(n.next != null) {
n = n.next;
length++;
}
return length;
}
void printNode() {
Node d = this;
while(d != null) {
if(d.next != null) {
System.out.print(d.data + " --> ");
} else {
System.out.println(d.data + " ");
}
d = d.next;
}
}
}
我想知道为什么我能够删除除第一个节点以外的所有其他节点。
我确实设置了以下测试用例:
public static void main(String[] args) {
//test cases
Node test = new Node(0);
for(int i = 1; i <= 20; i++) {
test.appendToTail(i);
}
test.printNode();
for(int i = 0; i <= 20; i = i + 2) {
test.deleteNode(test, i);
}
test.printNode();
}
删除所有偶数节点后我收到的输出是 0 --> 1 --> 3 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19
但我的预期输出是 1 --> 3 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19
.
问题是,当删除链表中的第一个元素时,您正在发送 head.next 但您没有在测试变量中使用它。
代码应该是
public static void main(String[] args) {
//test cases
Node test = new Node(0);
for(int i = 1; i <= 20; i++) {
test.appendToTail(i);
}
test.printNode();
for(int i = 0; i <= 20; i = i + 2) {
test = test.deleteNode(test, i);
}
test.printNode();
}
添加这个
test = test.deleteNode(test, i);
那么结果就是
0 --> 1 --> 2 --> 3 --> 4 --> 5 --> 6 --> 7 --> 8 --> 9 --> 10 --> 11 --> 12 --> 13 --> 14 --> 15 --> 16 --> 17 --> 18 --> 19 --> 20
3 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19