解法一:
public int kthToLast(ListNode head, int k) {
// 双指针 pre, cur 都指向头节点 head
ListNode pre = head, cur = head;
// cur 先走 k 步
for (int i = 0; i < k; i++)
cur = cur.next;
// 当 cur 走过尾节点时跳出
while (cur != null) {
// pre, cur 都向前走 1 步
pre = pre.next;
cur = cur.next;
}
return pre.val;
}
解法二:
package Test1;
import model.ListNode;
import java.util.ArrayList;
import java.util.List;
public class NodeHandle {
public static void main(String[] args) {
ListNode listNode = new ListNode(1);
listNode.next = new ListNode(2);
listNode.next.next = new ListNode(3);
listNode.next.next.next = new ListNode(4);
listNode.next.next.next.next = new ListNode(5);
int i = kthToLast(listNode, 2);
System.out.println(i);
}
public static int kthToLast(ListNode head, int k) {
if (head == null) {
return 0;
}
List<Integer> s = new ArrayList<>();
while (head != null) {
s.add(head.val);
if (head.next == null) {
break;
}
head = head.next;
}
int integer = s.get(s.size() - k);
return integer;
}
}
算法:返回倒数第 k 个节点
于 2023-04-25 23:03:59 首次发布