Implement an algorithm to find the kth to last element of a singly linked list.
Classical "Runner" Technique of linkedlist
/*Use two pointers, forward one K nodes, then the two pointers form a "window" contains K nodes. Then move two pointer one step by one step until the first one reach the end, return the second node. Pay attention to the situation when k is 0 or k is the length of the linked list, there migth be some tricks. */ public class KToLastNode { public Node kToLastNode(Node head, int k) { Node sent = new Node(0); sent.next = head; Node first = sent; while(k > 0) { first = first.next; k--; } Node second = sent; while(first != null) { second = second.next; first = first.next; } return second; } public void print(Node head) { Node temp = head; while(temp != null) { System.out.print(temp.val + " "); temp = temp.next; } System.out.println(""); } public static void main(String[] args) { Node node1 = new Node(1); Node node11 = new Node(1); Node node111 = new Node(1); Node node2 = new Node(2); Node node22 = new Node(2); Node node3 = new Node(3); node1.next = node11; node11.next = node2; node2.next = node111; node111.next = node3; node3.next = node22; Node head = node1; KToLastNode kt = new KToLastNode(); kt.print(kt.kToLastNode(head, 2)); } }
时间: 2024-10-14 12:54:32