C/C++面试题—链表中倒数第k个结点
生活随笔
收集整理的這篇文章主要介紹了
C/C++面试题—链表中倒数第k个结点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
解題思路
順數第1個結點和順數第k個結點
倒數第k個結點和倒數第1個結點
神馬關系?順數第k個結點指針走到倒數第1個結點時候,順數第1個結點指針剛好走到倒數第k個結點!
解題代碼
/*題目描述 輸入一個鏈表,輸出該鏈表中倒數第k個結點。*/#include <iostream> #include "ListNode.h" using namespace std; class SolutionFindKthToTail { public:/*node1 node2 ... nodek ....*/ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {if (pListHead == nullptr || k == 0)return nullptr;ListNode* pKthNode = pListHead;//順數第k個結點ListNode* p1thNode = pListHead;//順數第1個結點for (int i = 1; i < k; i++){pKthNode = pKthNode->next;if (pKthNode == nullptr) //k值不符合要求return nullptr;}while (pKthNode->next != nullptr) //第1個結點和第k個結點同時往后移動{pKthNode = pKthNode->next;p1thNode = p1thNode->next;}//pKthNode移動到尾結點,p1thNode剛好稱為倒數第k個結點return p1thNode;} };int main(int argc, char *argv[]) {SolutionFindKthToTail solution;ListNode node1(1);ListNode node2(2); node1.next = &node2;ListNode node3(3); node2.next = &node3;ListNode node4(4); node3.next = &node4;ListNode node5(5); node4.next = &node5;if (solution.FindKthToTail(&node1, 6) == nullptr){cout << "沒有找到" << endl;}cout << solution.FindKthToTail(&node1, 1)->val << endl;cout << solution.FindKthToTail(&node1, 2)->val << endl;cout << solution.FindKthToTail(&node1, 3)->val << endl;cout << solution.FindKthToTail(&node1, 4)->val << endl;cout << solution.FindKthToTail(&node1, 5)->val << endl;return 0; }代碼測試
總結
以上是生活随笔為你收集整理的C/C++面试题—链表中倒数第k个结点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows获取系统补丁+匿名管道
- 下一篇: 线性表:顺序队列算法实现