【說明】:
本文是左程雲老師所著的《程式設計師面試**指南》第二章中「在單鏈表和雙鏈表中刪除倒數第k個節點」這一題目的c++復現。
感謝左程雲老師的支援。
【題目】:
分別實現兩個函式,乙個可以刪除單鏈表中倒數第 k 個節點,另乙個可以刪除雙鏈表中倒數第 k 個節點。
【要求】:
如果鍊錶長度為 n,時間複雜度達到 o(n),額外空間複雜度達到 o(1)。
【思路】:
在確定待刪除節點的位置有乙個小技巧,大家可以看**推斷,也可以翻看左老師的原書奧。
【編譯環境】:
centos6.7(x86_64)
gcc 4.4.7
【實現】:
實現及測試**:
1/*2view code*檔名:lists_dellastkth.cpp34
*摘要:刪除單鏈表或雙鏈表的倒數第 k 個節點5*/
67 #include 8
9using
namespace
std;
1011
struct
singlenode12;
1617
struct
doublenode18;
2324 singlenode* removelastkthnode(singlenode *head,int
lastkth)
2534
if(0 ==lastkth)
3540
if(0 >lastkth)
4149
return
head; 50}
5152 doublenode* removelastkthnode(doublenode *head,int
lastkth)
5362
if(0 ==lastkth)
6369
if(0 >lastkth)
7080
return
head; 81}
8283
intmain()
84106
//單鏈表
107 sptr->next = new
singlenode;
108 sptr = sptr->next;
109 sptr->value =i;
110 sptr->next =null;
111//
雙鏈表112 dptr->next = new
doublenode;
113 dptr->next->pre =dptr;
114 dptr = dptr->next;
115 dptr->value =i;
116 dptr->next =null;
117}
118int k = 5
;119 cout << "
single linked list before remove last
"<< k << "
th data:
"<
120 sptr =shead;
121while(null !=sptr)
122126 cout <
127 cout << "
double linked list before remove last
"<< k << "
th data:
"<
128 dptr =dhead;
129while(null !=dptr)
130134 cout <
135136
removelastkthnode(shead,k);
137removelastkthnode(dhead,k);
138139 sptr =shead;
140 dptr =dhead;
141 cout << "
single linked list after removed:
"<
142while(null !=sptr)
143147 cout <
148 cout << "
double linked list after removed:
"<
149while(null !=dptr)
150154 cout <
155return0;
156 }
【說明】:
這個演算法不難,我寫的測試**(main 函式)較為麻煩,大家理解哈。
注:
在單鏈表和雙鏈表中刪除倒數第K個節點
分別實現兩個函式,乙個可以刪除單鏈表中倒數第k個節點,另乙個可以刪除雙鏈表中倒數第k個節點。如果鍊錶長度為n,則要時間複雜度達到o n 額外空間複雜度達到o 1 一種方法是設定快慢指標,快指標先走k步,此時慢指標從頭開始走,兩者同時開始走,當快指標走到尾時,慢指標走到倒數第k個節點,刪除當前慢指標的...
2 2在單鏈表和雙鏈表中刪除倒數第K個節點
題目 分別實現兩個函式,分別可以刪除單鏈表和雙鏈表中倒數第k個節點。思路 兩次遍歷鍊錶,第一遍每移動一步,就讓k值減1 第二遍從頭開始遍歷鍊錶,每移動一步k值加1,加到0就停止遍歷,此時移動到的節點就是要刪除節點的前乙個節點。實現class node class doublenode public ...
鍊錶 在單鏈表和雙鏈表中刪除倒數第K個節點
題目 分別實現兩個函式,乙個可以刪除單鏈表中倒數第k個節點,另乙個可以刪除雙鏈表中倒數第k個節點。要求 如果鍊錶長度為n,時間複雜度達到o n 額外空間複雜度達到o 1 解答 單鏈表 public class node public node removelastkthnode node head,...