1. 程式人生 > >連結串列面試題:返回倒數第k個節點

連結串列面試題:返回倒數第k個節點

題目來源:劍指offer
方法一:
首先我們先得出連結串列一共有多少個節點標記為count個,然後正數第count-k+1個就是倒數第k個節點,迴圈得到就可以。
這裡寫圖片描述
程式碼:

class Solution {
 public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    if(pListHead==NULL)
            return NULL;
        ListNode*cur=pListHead;
        unsigned int count=1;
        while
(cur->next) { count++; cur=cur->next; } k=count-k+1; count=1; cur=pListHead; while(cur) { if(count==k) break; cur=cur->next; count++; } return cur; } };

方法二:利用遞迴方法先找到最後一個節點,然後定義一個私有成員num,讓num=k;
然後對num進行操作,當num==0時找到該節點
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
程式碼:

class Solution {
private:
    int num;
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        num=k;
        if(pListHead==NULL)
            return NULL;
        ListNode*cur=FindKthToTail(pListHead->next,k);
        if
(cur!=NULL) return cur; else{ num--; if(num==0) return pListHead; return NULL; } } };