劍指offer 面試題15 鍊錶中倒數第k個節點

2021-07-02 11:47:14 字數 924 閱讀 6903

基本思想:

解法一:o(n^2)

先算出鍊錶的長度n,然後倒數第k個結點就是順序的第(n-k+1)個數,不過這樣需要2次遍歷鍊錶,第一次統計出煉表中節點的個數n,第二次就能找到倒數第k個節點。

解法二:o(n)

只需一次遍歷。設定兩個指標p1和p2,兩個指標剛開始都指向鍊錶的第乙個結點,然後讓p1指標先走(k-1)步,然後再讓兩個指標一起往後走,當p1指標指向鍊錶最後乙個結點的時候,p2指標剛好指向鍊錶中的倒數第k個結點。

#include using namespace std;  

typedef int elemtype;//資料型別模板

typedef struct node//結點

node;

typedef struct node * linklist;

//建表

node* creat_link(node *head)

return head;//建完錶後返回頭結點

} //輸出

void output_link(node * head)

cout

p1=p1->next;

else

return null;

} p2=head;

while(p1->next!=null)

return p2;

}

void main()

{ node *head=null;

node * phead=creat_link(head);//建表

output_link(phead);//輸出

node * result = foo(phead,3);

cout

劍指offer面試題15

面試題15 鍊錶中倒數第k個結點 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第乙個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。預備知識 鍊錶結點的定義如下 ...

劍指offer 面試題16 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...

劍指Offer面試題16 反轉鍊錶

反轉鍊錶 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出翻轉後鍊錶的頭結點。分析 假設h,i,j三個節點。h節點已經指向前面的節點,i節點要指向h節點,這時,i與j中間斷開,因此在將i節點指向 h節點之前,先記下j節點。因此調整時 需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個...