找回密码
 立即注册
首页 业界区 科技 可视化图解算法03:反转链表

可视化图解算法03:反转链表

姬宜欣 昨天 04:01
1. 题目

描述

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围: 0 ListNode:        if pHead is None:            return pHead  # 节点为空,直接返回        pre = None  # (操作的)前序节点        cur = pHead  # (操作的)当前节点        nxt = pHead  # (操作的)下一个节点        while cur is not None:            nxt = cur.next  # 移动nxt指针            cur.next = pre  # 更改当前节点(cur)指针域的指向            pre = cur  # 移动pre指针            cur = nxt  # 移动cur指针        return pre  # 返回反转之后的头结点if __name__ == '__main__':    root = ListNode(1)    insert_node(root, 2)    insert_node(root, 3)    insert_node(root, 4)    insert_node(root, 5)    print_node(root)    s = Solution()    node = s.ReverseList(root)    print_node(node)[/code]3.2 Java编码实现
  1. {1,2,3}
复制代码
3.3 Golang编码实现
  1. {3,2,1}
复制代码
如果上面的代码理解的不是很清楚,你可以参考视频的详细讲解。

  • Python编码:https://www.bilibili.com/cheese/play/ep1370257
  • Java编码:https://www.bilibili.com/cheese/play/ep1366713
  • Golang编码:https://www.bilibili.com/cheese/play/ep1364390
4.小结

本题的难点在于定义出3个指针变量,pre(序节点)、cur(当前操作的节点)和nxt(当前操作的下一个节点),并在初始化的时候明确指向,之后就可以更改cur的指针域(nxt)、移动pre、cur。由于链表节点有多个,操作方法一样,因此采用循环的方法。当cur指向Null时,说明链表的所有节点都完成了反转。
更多算法视频讲解,你可以从以下地址找到:
1.png


  • Python编码实现:https://www.bilibili.com/cheese/play/ep1509965
  • Java编码实现:https://www.bilibili.com/cheese/play/ep1510007
  • Golang编码实现:https://www.bilibili.com/cheese/play/ep1509945
对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。
今日佳句:众里寻他千百度。蓦然回首,那人却在,灯火阑珊处。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册