雙鏈表逆序

2021-08-20 16:35:52 字數 839 閱讀 5083

雙鏈表之逆序

一、結點結構

雙向鍊錶的資料結構定義如下:

typedef struct node

list;

其中,elemtype可以是任意資料型別如int、float或者char等,在演算法中,規定其預設為int型別。

二、帶頭結點

本文描述的是雙向鍊錶逆序,鍊錶逆序需要維護3個指標,分別指向前乙個節點、當前節點和下乙個節點,具體**如下:

list *reverselist(list *head)

list *p1=head->next, *p2=p1->next, *p3=null;

p1->next = null;

while (p2)

head->next = p1;             // 恢復頭結點

p1->prior = head;

return head;

}在鍊錶逆序過程中,非常重要的一點是要防止斷鏈問題,因此,在移動指標逆序某個結點時,需要用乙個指標指向該結點的下一結點,防止下一結點丟失。

三、不帶頭結點

list *reverselist(list *head)

list *p1=head, *p2=p1->next, *p3=null;

p1->next = null;

while (p2)

head = p1;

return head;

}不帶頭結點的鍊錶逆序與帶頭結點的區別在於紅色部分**,即初始p1指向的是第乙個結點而不是頭結點,最後head直接指向p1而不是用其next來指向p1。

雙鏈表的逆序 C程式設計

題目 建立乙個雙鏈表,然後逆置雙鏈表。程式分析 將雙鏈表逆置,即是將雙鏈表中的元素逆置,依次將雙鏈表的結點按照頭插法插入到乙個新建鍊錶的首位,即可實現雙鏈表元素的逆置 如下 include include typedef struct node stud stud creat int n 建立鍊錶 ...

單鏈表 雙鏈表

實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...

單鏈表逆序

include include typedef struct student student typedef struct list list,list list createlist void paixu list l 比較笨拙的一種方法 list reverse list l int main ...