/*
假設這裡的位址不超過99999
輸入規則:
*/#include
struct node
;typedef
struct node item;
// 用這個陣列模擬記憶體
item item_list[
100010];
void
readlink
(int head_node)
printf
("\n");
}int
main()
printf
("反轉前:\n");
readlink
(head_position)
;int front, rear, p;
// 初始化front為首節點的位址,rear為第二個節點的位置,要反轉這兩個節點,需要把第二個節點的next指向前乙個點
// 但是如果直接修改,原來的第二個節點的next節點就找不到了,因此要先記錄一下第二個節點的next
// 這裡的head_position和item_list[head_position].position是相同的,方便理解因此寫成後者
front = item_list[head_position]
.position;
rear = item_list[item_list[head_position]
.next]
.position;
// 反轉的時候,兩個節點反轉一次,
// 每次都要把後面節點的next儲存一下,然後把後面節點的next賦值為前面節點的位置
// 再重新初始化front和rear兩個值
while
(rear!=-1
)// 處理一下原來的頭節點
item_list[head_position]
.next =-1
;printf
("反轉後:\n");
readlink
(front);}
/*00100 6
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
*/
輸出:反轉前:
00100 1 12309
12309 2 33218
33218 3 00000
00000 4 99999
99999 5 68237
68237 6 -0001
反轉後:
68237 6 99999
99999 5 00000
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 -0001
方法二:用指標操作單鏈表:#include
#include
typedef
struct node* ptrnode;
struct node
;void
readlink
(ptrnode front)
printf
("\n");
}int
main()
ptrnode p;
printf
("反轉前:\n");
readlink
(front->next)
; front = front->next;
rear = front->next;
// 處理一下頭節點
front->next =
null
;while
(p!=
null
)free
(p);
printf
("反轉後:\n");
readlink
(front)
;}
輸出5
2 4 6 8 10
反轉前:
2 4 6 8 10
反轉後:
10 8 6 4 2
關於單鏈表
單鏈表結構體 typedef struct student node 建立單鏈表 node create else p head while cycle else head head next p next null printf n yyy d head data return head 單鏈表測...
關於單鏈表的逆序
昨天的課後習題出現了乙個單鏈表的逆序問題,作為乙個志在成為程式媛的我,寫了我人生中的第一篇部落格。題目要求是 逆轉鍊錶,並返回逆轉後的頭結點。我們先考慮一下對於鍊錶逆序時可能會出現的情況 對於乙個空鍊錶 很明顯沒有資料,沒有內容,不需要逆序,之前return 對於只有乙個節點的鍊錶我們也是不需要考慮...
關於單鏈表的幾道題
思路 建立三個工作指標p,q,r,然後p遍歷整個鍊錶,p每到乙個結點,q就從這個結點往後遍歷,並與p的數值比較,相同的話就free掉那個結點.刪除單鏈表中重複結點的演算法 linklist removedupnode linklist l else q q next p p next return ...