連結串列面試題:返回倒數第k個節點
阿新 • • 發佈:2019-01-04
題目來源:劍指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;
}
}
};