LeetCode--HOT100题(23)

目录

  • 题目描述:206. 反转链表(简单)
    • 题目接口
    • 解题思路
    • 代码
  • PS:

题目描述:206. 反转链表(简单)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

LeetCode做题链接:LeetCode-反转链表

示例 1:
LeetCode--HOT100题(23)_第1张图片

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:
LeetCode--HOT100题(23)_第2张图片

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000

进阶: 链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

题目接口

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {

    }
}

解题思路

双指针迭代

  • 1.申请两个指针,第一个指针叫 pre,最初是指向 null 的。
  • 2.第二个指针 cur 指向 head,然后不断遍历 cur。
  • 3.每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 往下一个结点移动。
    这里注意,pre往下一个移动,可以pre = cur,但是cur往下一个结点移动得借助一个tmp中间变量,这个变量一开始就得保存cur.next的值。
  • 4.都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
		ListNode pre = null;
        ListNode cur = head;
        ListNode tmp = null;
        while (cur != null) {
            // 保存记录下一个节点的位置
            tmp = cur.next;
            // 最新要转移的节点指向pre,一次的时候pre为null,下一次就是上一次转移过期的节点了
            cur.next = pre;
            // pre和cur都往下一个节点移动 
            pre = cur;
            cur = tmp;
        }
        return pre;
    }
}

成功!
LeetCode--HOT100题(23)_第3张图片

PS:

感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个喔~

你可能感兴趣的:(LeetCodeHot100,leetcode,算法)