關於單鏈表的反轉的學習

2021-08-30 10:58:00 字數 2160 閱讀 5394

/*

假設這裡的位址不超過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 ...