リンクリスト反転アルゴリズム

インタビューの質問 20: 単一のリンク リストを反転する方法
(1) リンク リストを反転します。循環アルゴリズム
リンク リストは、C で一般的に使用される基本的なデータ構造です。これは十分に習得する必要があります。リンク リストを逆順に並べるのは、並べ替えるよりも面倒です。重要なのは、前のノード、現在のノード、および 3 つの要素を抽象化することです。次のノード
ノードが
これら 3 つを備えていれば、アルゴリズムを実行できます。
これら 3 つはデータ構造として理解でき、その他のステップはループとアルゴリズムです。

126 //反转一个链表
127 Link* LinkRevert(Link* p){
128     printf("enter function LinkRevert\n");
129     if(p->next == NULL){
130       return p;
131     }
132     Link* pre = p->next;
133     Link* cur = pre->next;
134     Link* behind = cur->next;
135     pre->next = NULL;
136     printf("cur1=%p\n", cur);
137     while(cur)
138     { 
139       printf("cur2=%p\n", cur);
140       cur->next = pre;
141       pre = cur;
142       cur = behind;
143       if(behind)
144       {
145       behind = behind->next;
146       }
147     }
148     p->next = pre;
149     printf("cur3=%p\n", pre);
150     printf("exit function LinkRevert\n");
151     return p;
152 }
153 int main() {
154     Link* p = initLink();
155     printf("初始化链表为:\n");
156     display(p);
157     Link* p2 = LinkRevert(p);
158     display(p2);
159     Link_free(p2);
160     return 0;
161 }

動作状況:

root@mkx:~/learn/link# ./link 
初始化链表为:
enter function displaty
1 2 3 4 
exit function displaty
enter function LinkRevert
cur1=0x22a6050
cur2=0x22a6050
cur2=0x22a6070
cur2=0x22a6090
cur3=0x22a6090
exit function LinkRevert
enter function displaty
4 3 2 1 
exit function displaty
root@mkx:~/learn/link# 

おすすめ

転載: blog.csdn.net/maokexu123/article/details/129286401