【劍指offer】鏈表中倒數第k個節點

題目描述

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

思路

方法有很多,可以用一個棧來存鏈表中的所有節點,然後輸出棧中的第k個節點就可以了;也可以用快慢指針,快指針先走k-1步之後慢指針再走,當快指針走到頭時,慢指針所在的節點即倒數第k個結點;下面代碼是入棧的方法。另外要判斷k不合法的情況。

代碼

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        int count = 0;
        stack<ListNode*> s;
        while(pListHead){
            s.push(pListHead);
            pListHead = pListHead->next;
            count++;
        }
        if(k == 0 || k > count){
            return NULL;
        }
        ListNode* t;
        while(k--){
            t = s.top();
            s.pop();
        }
        return t;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章