求链表倒数第k个结点
題目:輸入一個(gè)單向鏈表(只有指向下一個(gè)結(jié)點(diǎn)指針),輸出鏈表中的倒數(shù)第k個(gè)結(jié)點(diǎn)。
分析:
1. 一個(gè)單向鏈表只有指向下一個(gè)結(jié)點(diǎn)的指針,所以我們無法得到前面一個(gè)結(jié)點(diǎn)的指針,所以不能通過最樸素的枚舉法來求出。
2. 現(xiàn)在要求出倒數(shù)第k個(gè)結(jié)點(diǎn)。現(xiàn)在用一個(gè)指針枚舉是無法求出,但是我們可以使用兩個(gè)指針法(非常重要)。
? ?初始化設(shè)置兩個(gè)指針p1和p2,p1和p2都指向鏈表的頭結(jié)點(diǎn)。我們可以先讓指針p1指針先走到第k個(gè)結(jié)點(diǎn),下一步開始兩個(gè)指針p1和p2一起走,當(dāng)p1指向鏈表最后一個(gè)結(jié)點(diǎn)的時(shí)候p2指向即為倒數(shù)第k個(gè)結(jié)點(diǎn)。
? ?為什么呢這個(gè)方法是正確的?
? ?當(dāng)p1指向第k個(gè)結(jié)點(diǎn)的時(shí)候,p2和p1相差k個(gè)結(jié)點(diǎn),所以當(dāng)p1指向尾結(jié)點(diǎn)的時(shí)候,p2指向的即為倒數(shù)第k個(gè)結(jié)點(diǎn)。
代碼:
[cpp]?view plaincopy
總結(jié)
以上是生活随笔為你收集整理的求链表倒数第k个结点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。