翻转链表

描述:翻转一个链表
样例
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
思路:刚开始不是很懂,后面参考网上,也不是很理解。后来在论坛求助,感谢论坛里面大神@qq_36782456@ccssddnn218的帮助!

class Solution {
public:
    /**
     * @param head: The first node of linked list.
     * @return: The new head of reversed linked list.
     */
    ListNode *reverse(ListNode *head) {
        ListNode *prev = NULL;
        while (head != NULL) {
            ListNode *temp = head->next;
            head->next = prev;
            prev = head;
            head = temp;
        }
        return prev;
    }
};

[quote=引用 2 楼 qq_36782456 的回复:]
这个应该很好理解吧 就是链表的回指
假如 1—>2—>3—>4—>null
首先让null<—1
再次循环 null<—1<—2
接着循环 null<—1<—2<—3
null<—1<—2<—3<—4
返回 4的节点,就是prev。[/quote]

[quote=引用 1 楼 ccssddnn218 的回复:]
[code=c]//交换前
+------------+ +-------------+ +-------------+
|node1       | | node2       | |  node3      |
|data        | | data        | |  data       |
|next(node2) | | next(node3) | |  next(NULL) |
+------------+ +-------------+ +-------------+
node1 -> node2 -> node3
//交换后
+------------+ +-------------+ +-------------+
|node1       | | node2       | |  node3      |
|data        | | data        | |  data       |
|next(NULL)  | | next(node1) | |  next(node2)|
+------------+ +-------------+ +-------------+
node1 <- node2 <- node3
[/code]
就把这些节点的next值修改一下就完了。[/quote]

这是结合他们的回答,自己做的一个分析草图。
这里写图片描述
temp用来存放以前的链表,使之可以遍历原来的链表。pre用来使每个head都指向他的上一个数,然后将新的head赋给pre。以此循环,最后就pre存放的就是原来链表的最后一个数,并且每个数都指向原来链表中的上一个数。最后返回pre,也就实现了链表的反转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值