算法学习100天——12 反转链表

题目地址(2. 两数相加)

https://leetcode-cn.com/problems/add-two-numbers/

题目描述

描述
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围: 0\leq n\leq10000≤n≤1000
要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。

如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:

思路

这道题确实不难,很简单,拿到题,看到链表,一般都是操作的指向问题,

所以直接两个变量,两两反转就ok了

代码

/**
 * 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 next = null;
        while(head != null){
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
}

结果

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:40.9 MB, 在所有 Java 提交中击败了42.71%的用户

posted @ 2022-03-11 20:18  浪漫主义程序员  阅读(43)  评论(0编辑  收藏  举报