LeetCode刷题(1)【链表】反转链表(C语言)
题目链接——206. 反转链表 - 力扣(LeetCode) (leetcode-cn.com)**
反转链表
思路一:反转指针。
本质上就是调转指针的方向。
首先我们定义两个指针,一个叫n1,一个叫n2。(Node1,Node2)
让n2指向第一个结点,让n1指向空。
n2->next指向n1。
但是,两个指针是反不转的。因为:
这里让n2->next指向n1,就是把n1的值存到n2的next上,n2->next原来存的是2的地址,现在存的是NULL,但是继续往后走的时候,我们发现找不到2了 。
所以要反转指针,两个指针是反不动的,要用3个。
前两个指针 反转,最后一个指针负责记录下一个位置。
什么时候结束
n2 == NULL;
重复的条件用循环解决
- 初始条件
- 迭代过程
- 结束条件
画图看起来很浪费时间,但提升了写代码的体验,更好的解决问题。
代码实现:
1 | /** |
思路二:头插法
取结点头插到新链表中。cur是当前操作结点,用一个next来保存下一个结点(同上)。
文字简单描述:
从原链表去一个点下来,放到新的链表中,当做新链表的头结点cur = newhead,
迭代往后走,取下一个结点……
代码实现:
1 | /** |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 半生瓜のblog!