雙鏈表之逆序
一、結點結構
雙向鍊錶的資料結構定義如下:
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 ...