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编码实现
3.3 Golang编码实现
如果上面的代码理解的不是很清楚,你可以参考视频的详细讲解。
- 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时,说明链表的所有节点都完成了反转。
更多算法视频讲解,你可以从以下地址找到:
- Python编码实现:https://www.bilibili.com/cheese/play/ep1509965
- Java编码实现:https://www.bilibili.com/cheese/play/ep1510007
- Golang编码实现:https://www.bilibili.com/cheese/play/ep1509945
对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。
今日佳句:众里寻他千百度。蓦然回首,那人却在,灯火阑珊处。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |