以包含四個元素、帶有頭結點的鍊錶l為例:
head->a1->a2->a3->a4;
保持頭結點不變,頭插法實現鍊錶反轉步驟為:
1: 將a2插在a1前面,該鍊錶變為:
head->a2->a1->a3->a4;
2: 將a3插在a2前面,該鍊錶變為:
head->a3->a2->a1->a4;
2: 將a4插在a3前面,該鍊錶變為:
head->a4->a3->a2->a1;
可以發現,此時已經完成了鍊錶的反轉。
仔細觀察,該方法可抽象為:
head->p->...->q->t->...->尾節點
即:每次將q節點插入首個節點p的前面。為了進行下次操作,我們還需要在插入前記錄下q後面節點t。
當q為空時,該方法結束,此時完成了整個鍊錶的反轉。最後,記得將頭結點head指向反轉後的首個節點p,
同時將反轉後的尾節點的next指標設為空。
c++實現:
struct mylist
};bool reverselist2(mylist * l)
head->next = p;
firstori->next = null;
return true;
}ps:除了上述方法外,嘗試過先記錄每個節點位置,然後更改每乙個節點next的值,
使它指向原鍊錶的前乙個節點。實現後發現,需要迴圈的次數太多,但是方法比較直觀。
鍊錶操作 頭插法尾插法
單鏈表的插入操作,包括頭插和尾插,兩種的時間複雜度都為o n 單鏈表插入操作 頭插 尾插 include include using namespace std 定義結點資料型別 typedef int elemtype 結點定義 typedef struct lnode lnode,linklis...
頭插法 尾插法建立鍊錶
鍊錶是線性表的一種,一般來說鍊錶就是一系列的儲存資料元素的單元通過指標串接起來形成的,常見的鍊錶是單鏈表和雙鏈表,乙個域用於資料元素的儲存,另乙個或兩個域是指向其他單元的指標。對於單鏈表來說,指標域是乙個,指向當前節點的後繼節點 雙鏈表來說,乙個指標域指向當前節點的後繼節點,另外乙個指標域指向當前節...
使用頭插法實現鍊錶逆序
用頭插法實現鍊錶逆序,本質上跟使用就地插解法 或者就地逆置法 的思想是一致的,只不過頭插法就是使用乙個新的頭結點代替新的煉表頭指標來實現鍊錶的逆序,這裡以五個節點的鍊錶為例,來實現該方法,具體的 如下 用頭插法實現列表逆序 include struct listnode void printlist...