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

 

示例:

输入: 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
  • 递归
  • 链表

  • 👍 314
  • 👎 0
  • 代码

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

    一遍遍历,题目和LeetCode刷题【206】反转链表一样,这里是实现的迭代遍历的方法,在206题中实现的是递归的方法,两篇可以结合起来一起看下,其本质实现逻辑是一样的

    1. 记下上一个节点,和下一个节点
    2. 把当前节点的next指向上一个节点,
    3. 把上一个节点pre指向当前节点
    4. 跳转处理下一个节点
    5. 记得清除头结点的next指向