题目
反转一个链表
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解法
这道题我们需要两个额外的链表节点变量ListNode
来协助完成
假设我们有一个1->2->3->4->5
的链表,我们定义cur
和prev
两个节点变量,分别用来表示当前节点和上一个节点,cur
初始指向头节点,prev
初始为空,然后遍历这个链表
从1
这个节点开始,此时cur
即为1
,我们只需要在遍历过程中不断的改变每个节点指针的方向,让它指向前一个节点即可,需要注意的就是,大部分语言都需要实现存下cur.next
的值,否则在指针的变换中可能会使链表断掉
代码
Java 版
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 版
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
使用了多重赋值的语法,关于多重赋值原理的解释,看这里:Python——多重赋值的原理