所以我从考试中得到了这个问题。
如何从单链表的尾部获取第 n 个节点?
每个节点都有一个值和一个下一个(指向下一个值的指针)。我们得到这个:
getNodeFromTail(Node head, int x) {
}
所以我这样做的方法是通过遍历一次来找到列表的长度。然后再去获取 (length - x) 节点。所以总共有2次遍历。
getNodeFromTail(Node head, int x) {
int length = 0;
Node headdupe = head;
while (headdupe.next != NULL) {
headdupe = headdupe.next;
length++;
}
int a = length--;
for (int y = 0; y < a; y++) {
head = head.next;
}
return head;
}
这是对的,但还有一个额外的问题是问我们是否可以做同样的事情,但只能遍历一次。考试的时候想不出来,后来想了一个办法,但又不太确定。
我可以制作一个长度为 x 的 ArrayList。然后每次我运行while循环时,我都会在数组的顶部添加一个元素,向下级联并启动数组的最后一个元素。然后当头部命中 null 时,返回数组 [x-1] 处的节点。
这是正确的吗?有更好的解决方案吗?