鏈表中倒數(shù)第K個結(jié)點

輸入一個鏈表,輸出該鏈表中倒數(shù)第k個結(jié)點。

容易想到的方法是遍歷一下,計算總共有n個結(jié)點,然后倒數(shù)第k個就可以轉(zhuǎn)化為正數(shù)第n-k+1個結(jié)點。
還可以使用兩個指針,先讓第一個指針走k步,然后兩個指針一起走,當?shù)谝粋€指針為null時,第二個指針所指向的就是倒數(shù)第k個結(jié)點。其實就是讓兩個指針之間相差k步。思路很精巧。

public ListNode FindKthToTail(ListNode head,int k) {
        if (head == null) {
            return null;
        }
        ListNode p = head;
        ListNode q = head;
        while (k-- > 0) {
            if (q == null) {
                return null;
            }
            q = q.next;
        }
        while (q != null) {
            q = q.next;
            p = p.next;
        }
        return p;
    }

舉一反三
1.求鏈表的中間結(jié)點。
使用一快一慢兩個指針,慢的一次走一步,快的一直走兩步,當快的走到鏈表末尾時,慢的即走到中間位置。

  1. 判斷一個單項鏈表是否成環(huán)。
    使用一快一慢指針,如果快的能追上慢的說明有環(huán),如果快的到了末尾還沒追上慢的說明沒有環(huán)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容