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

题目

​ 反转一个链表

​ 示例:

输入: 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 版

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——多重赋值的原理

发布了72 篇原创文章 · 获赞 89 · 访问量 6542

猜你喜欢

转载自blog.csdn.net/scfor333/article/details/104320684