题目:
输入一个链表,输出这个链表的第 k 个节点。本题从 1 开始计数,即链表的尾节点是倒数第 1 个节点。
分析一:
设置两个指针 P1 和 P2,先让 P1 移动 K 个节点,则还有 N - K 个节点可以移动。此时让 P1 和 P2 同时移动,可以知道当 P1 移动到链表结尾时,P2 移动到第 N - K 个节点处,该位置就是倒数第 K 个节点。
代码一:
package offer.xzs.twentytwo;
public class Demo01 {
public static void main(String[] args) {
ListNode head = new ListNode(1);
ListNode node1 = new ListNode(2);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(4);
ListNode node4 = new ListNode(5);
ListNode node5 = new ListNode(6);
head.setNext(node1);
node1.setNext(node2);
node2.setNext(node3);
node3.setNext(node4);
node4.setNext(node5);
ListNode node = getNode(null, 3);
System.out.println(node.getValue());
}
public static ListNode getNode(ListNode head, int k) {
if (head == null)
return null;
ListNode index1 = head;
while (index1 != null && k-- > 0)
index1 = index1.getNext();
if (k > 0)
return null;
ListNode index2 = head;
while (index1 != null) {
index1 = index1.getNext();
index2 = index2.getNext();
}
return index2;
}
}