[剑指Offer]24.反转链表 - 简单

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

示例:

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

限制:
0 <= 节点个数 <= 5000

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof

解题思路
这道题题面是相当的简单,代码量也是很小,但确实要弄明白怎么反转,说白就是控制指针,做之前在纸上把图画明白对解题很有帮助。

我提交了两种解法,思路稍有不同,但基本思路是一致的就是把当前指针的next指向前一个节点,为了保证链条不断掉,记得要保存正序下当前节点的下一个节点。

[剑指Offer]24.反转链表 - 简单_第1张图片
正序.png
  1. 生成一个为null 的Pre 前置节点,将头节点设为当前节点 Cur
  2. 首先保存当前节点Cur的下一个节点为 Next
  3. 将当前节点的next指向前一个节点 Pre,即当前节点反转
  4. 调整指针,使前置节点Pre变成反转后的最新节点,当前节点指向原来的下一个节点。

直至所有节点反转完成。

[剑指Offer]24.反转链表 - 简单_第2张图片
反转过程.png
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode Pre = null;
        ListNode Cur = head;

        while(Cur != null){
            //保存当前节点的下一个节点
            ListNode Next = Cur.next;
            //反转当前节点
            Cur.next = Pre;
            // 调整指针
            Pre = Cur;
            Cur = Next;
        }
        return Pre;
    }
}

你可能感兴趣的:([剑指Offer]24.反转链表 - 简单)