定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

 

示例:

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

 

限制:

0 <= 节点个数 <= 5000

 

注意:本题与主站 206 题相同:https://leetcode-cn.com/problems/reverse-linked-list/

Related Topics
  • 递归
  • 链表

  • 👍 448
  • 👎 0
  • 遍历修改指针

    修改指针

    操作简单

    1. 把当前节点的next指向之前遍历的节点pre,这是核心
    2. 因为进行了上一步操作之后下一个节点就找不到了,所以需要一个变量暂存一下修改之前的next指向
    3. 同时pre指向跟随遍历窗口移动到当前节点
    4. 同时需要把当前移动到原链表的下一个节点,也就是步骤(2)中记下的那个
    5. 到结束时遍历到原链表的结尾null节点,此时pre指向为原链表的结尾非空那个节点,也就是翻转后的头结点

    代码

    class Solution {
        public ListNode reverseList(ListNode head) {
            if (null == head || head.next == null){
                return head;
            }
            ListNode pre = null;
            ListNode cur = head;
            while (cur!=null){
                ListNode next = cur.next;
                cur.next = pre;
                pre = cur;
                cur = next;
            }
            return pre;
        }
    }