leetcode-JZ24

Posted Alan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-JZ24相关的知识,希望对你有一定的参考价值。

题面

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

示例:

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

限制:

0 <= 节点个数 <= 5000

原题链接

分析

第一类做法

把链表遍历一遍,把变量存储起来,然后反过来建立一个新链表

这种做法很简单,可以用vector,也可以定义一个特定大小的数组。但是并不推荐,因为等于遍历了两次链表,还需要把链表中所有遍历存储起来。

时间复杂度:O(n)

空间复杂度:O(n)

第二类做法(推荐)

只遍历一次链表,遍历的过程中,就把指针指向改过来

这种做法有一个容易疏漏之处,即必须把链表第一个节点的next值设为NULL,否则,就像狗咬着自己的尾巴转圈,链表会无限长。

时间复杂度:O(n)

空间复杂度:O(1)

源代码(注释部分即为思路)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        //特判
        if(head==NULL){
            return head;
        }
        
        ListNode* now = head->next;
        ListNode* pre = head;
        ListNode* later = head;
        //这一步极其重要,我就是在这一步卡了半个小时
        pre->next = NULL;
        
        while(now != NULL){
            later = now->next;
            //更改指针方向
            now->next = pre;
            
            pre = now;
            now = later;
            
        }
        //最终now的值必然为NULL
        return pre;
    }
    
};

以上是关于leetcode-JZ24的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-JZ31

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试

实用代码片段

WordPress - 代码片段插件

缺少 SQL SERVER 2014 代码片段

这些角度电子邮件指令代码片段如何连接