1. 程式人生 > >劍指offer-14:連結串列中倒數第k個結點

劍指offer-14:連結串列中倒數第k個結點

題目描述

輸入一個連結串列,輸出該連結串列中倒數第k個結點。

思路

兩個指標,先讓第一個指標和第二個指標都指向頭結點,然後再讓第一個指正走(k-1)步,到達第k個節點。然後兩個指標同時往後移動,當第一個結點到達末尾的時候,第二個結點所在位置就是倒數第k個節點處。

程式碼

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution14 {
public ListNode FindKthToTail(ListNode head,int k) { if(head==null||k<=0){ return null; } ListNode p=head,q; for(int i=1;i<k;i++){ if(p.next!=null){ p=p.next; }else{ return null; }
} q=head; while(p.next!=null){ p = p.next; q=q.next; } return q; } public static void main(String[] args) { ListNode node1=new ListNode(3); ListNode node2=new ListNode(13); ListNode node3=new ListNode(
21); ListNode node4=new ListNode(33); ListNode node5=new ListNode(23); ListNode node6=new ListNode(42); ListNode node7=new ListNode(28); ListNode node8=new ListNode(19); node1.next=node2; node2.next=node3; node3.next=node4; node4.next=node5; node5.next=node6; node6.next=node7; node7.next=node8; System.out.println( new Solution14().FindKthToTail(node1,4).val); } }