题目描述

反转一个单链表。

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

链接:https://leetcode-cn.com/problems/reverse-linked-list


解题思路

我们可以申请两个指针:

  • 第一个指针叫 pre,最初是指向 null 的。
  • 第二个指针 cur 指向 head,然后不断遍历 cur。

每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。
动画演示如下:
206. 翻转链表 - 图1

代码实现

# py3
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        leftNode = None;
        midNode = head;
        while midNode :
            rightNode = midNode.next
            midNode.next = leftNode
            leftNode = midNode
            midNode = rightNode
        return leftNode
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode leftNode = null;
        ListNode midNode = head;
        while(midNode != null) {
            ListNode rightNode = midNode.next;
            midNode.next = leftNode;
            leftNode = midNode;
            midNode = rightNode;
        }
        return leftNode;
    }
}
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* leftNode = NULL;
        ListNode* midNode = head;
        while(midNode != NULL) {
            ListNode * rightNode = midNode->next;
            midNode->next = leftNode;
            leftNode = midNode;
            midNode = rightNode;
        }
        return leftNode;
    }
};