題目:輸入乙個鍊錶,輸出鍊錶中倒數第k個節點,為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾巴節點是倒數第乙個節點。
方法1:先遍歷鍊錶得到鍊錶的個數n,倒數第k個節點就是n-k+1再遍歷一次鍊錶,找到第n-k+1個節點就是倒數第k個節點;這種方法遍歷兩次鍊錶;
方法2:先遍歷鍊錶把鍊錶壓入乙個棧,再出棧,第k次出棧就是第k個節點;
方法3:先反轉鍊錶,再遍歷
方法4:定義兩個指標,第乙個指標從鍊錶的頭指標開始遍歷向前走k-1;第二個指標保持不動,從第k步開始,第二個指標也開始遍歷,兩個指標差距k-1個距離
,當第乙個指標走到了尾巴節點,第二個指標正好在倒數第k個節點;
**:
listnode* findkthfromtail(listnode* plisthead,int k)
listnode* pahead = plisthead;
listnode* pbehind = null;
for (int i = 0; i < k-1; i++)
else
}pbehind = plisthead;
while(pahead->m_pnext != null)
return pbehind;
}
完整**:
// findkthfromtail.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include using namespace std;
struct listnode
};listnode* findkthfromtail(listnode* plisthead,int k)
listnode* pahead = plisthead;
listnode* pbehind = null;
for (int i = 0; i < k-1; i++)
else
}pbehind = plisthead;
while(pahead->m_pnext != null)
return pbehind;
}int _tmain(int argc, _tchar* argv)
{ listnode* head = new listnode(1);
listnode* node1 = new listnode(2);
listnode* node2 = new listnode(3);
listnode* node3 = new listnode(4);
listnode* node4 = new listnode(5);
listnode* node5 = new listnode(6);
listnode* node6 = new listnode(7);
head->m_pnext = node1;
node1->m_pnext = node2;
node2->m_pnext = node3;
node3->m_pnext = node4;
node4->m_pnext = node5;
node5->m_pnext = node6;
node6->m_pnext = null;
listnode* p = findkthfromtail(head,3);
cout 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。struct listnode方法 定義兩個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k 1,第二個指標保持不動 從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1,當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二... 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。ac class solution def findkthtotail self,head,k write code here 將每個節點存在棧裡,選取stack中第k個值 stack while head head head.next if k len s... acwing打卡活動 劍指offer 打卡活動 周二第十題 鍊錶中倒數第k個節點 definition for singly linked list.public class listnode 思路 設列表總結點數為n,則n k 1 為該列表的倒數第k個節點 如 n 10,k 2,則 10 2 1 ...鍊錶中倒數第k個節點
鍊錶中倒數第k個節點
鍊錶中倒數第k個節點