1. 程式人生 > >14.鏈表中倒數第k個結點

14.鏈表中倒數第k個結點

就是 title 14. head 輸入 public bject solution while

題目描述

輸入一個鏈表,輸出該鏈表中倒數第k個結點。

題目解答

方法一:

/*
public class ListNode {
    int val;
    ListNode next = null;
 
    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        if(head==null || k<1){
            return null
; } ListNode cur=head; while(cur!=null){ k--; cur=cur.next; } if(k>0){ //1->2->3,k=4,k的變化:3,2,1,大於0,沒有倒數第k個節點 return null; }else if(k==0){ //1->2->3,k=3,k的變化:2,1,0,等於0,就是頭節點 return head; }
else{ //k<0,1->2->3,k=2,k的變化:1,0,-1,小於0 cur=head; while(++k!=0){ cur=cur.next; } return cur.next; } } }

方法二:

/*
public class ListNode {
    int val;
    ListNode next = null;
 
    ListNode(int val) {
        this.val = val;
    }
}
*/ public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null || k<1){ return null; } ListNode pre=head;//快指針 ListNode last=head;//慢指針 for(int i=1;i<k;i++){ if(pre.next!=null){//快指針先走k步 pre=pre.next; }else{ return null; } } while(pre.next!=null){//當快指針走到頭的時候,慢指針指向倒數第k個節點 pre=pre.next; last=last.next; } return last; } }

快慢指針

14.鏈表中倒數第k個結點