LeetCode-206——反转链表(Java、Python)

题目

​ 反转一个链表

​ 示例:

1
2
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

解法

​ 这道题我们需要两个额外的链表节点变量ListNode来协助完成

​ 假设我们有一个1->2->3->4->5的链表,我们定义curprev两个节点变量,分别用来表示当前节点和上一个节点,cur初始指向头节点,prev初始为空,然后遍历这个链表

​ 从1这个节点开始,此时cur即为1,我们只需要在遍历过程中不断的改变每个节点指针的方向,让它指向前一个节点即可,需要注意的就是,大部分语言都需要实现存下cur.next的值,否则在指针的变换中可能会使链表断掉

代码

Java 版

1
2
3
4
5
6
7
8
9
10
11
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode pre = null;
while (cur != null) {
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}

Python 版

1
2
3
4
5
def reverseList(head):
cur, prev = head, None
while cur:
cur.next, prev, cur = prev, cur, cur.next
return prev

​ Python 的代码中cur.next, prev, cur = prev, cur, cur.next使用了多重赋值的语法,关于多重赋值原理的解释,看这里:https://blog.csdn.net/scfor333/article/details/104316694

-------------本文结束感谢您的阅读-------------