首页 > 代码库 > CTCI 2.2

CTCI 2.2

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));    }}