每天一道劍指offer-鏈表中倒數第k個結點

  • 2019 年 10 月 4 日
  • 筆記

今天的題目 每天的題目見github(看最新的日期): https://github.com/gzc426 具體的題目可以去牛客網對應專題去找。

昨天的題解

題目

每天一道劍指offer-鏈表中倒數第k個結點 來源:牛客網對應專題

題目詳述

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

題目詳解

思路

  • 就是快慢指針,快指針先走k-1步,然後快慢指針一起走,當快指針走到末尾,那麼慢指針就到了倒數第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) {          int length = 0;          ListNode tempHead = head;          while(tempHead != null)          {              length++;//這裡計算鏈表的長度              tempHead = tempHead.next;          }          if(k > length || k <=0)//因為倒數第K個節點,如果超過鏈表長度可不行呀              return null;          ListNode before = head;          ListNode after = head;          for(int i=0;i<k-1;i++)快指針先走k-1步              before = before.next;          while(before.next != null)          {              before = before.next;              after = after.next;//快慢指針一起走。          }          return after;      }  }

程式碼截圖(為了避免程式碼排版錯亂