【4.4日题解】——反转链表II(c代码表述)

简介: 【4.4日题解】——反转链表II(c代码表述)

今天的题目也不难,就基本的贪心硬贪就好了。希望有想要提高的同学跟我们一起来刷题0.0

4.4日每日一题——反转链表II


🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人

✨联系方式:2201891280(QQ)

⏳全文大约阅读时间: 20min

全文目录

☘前言☘

解题思路

📑写在最后

92. 反转链表 II


解题思路

先找到反转的起点的前一个结点和起点节点,其中前一个节点是为了头插,第一个节点就是反转之后的最后一个节点,进行记录,后面使用头插法进行反转,最终将最后的一个节点和后面的节点连起来就行了。

是不是完全没听懂????哈哈哈 看图

链表文字是很难表述清楚的,所以常画图吧。


今天写的代码


struct ListNode* reverseBetween(struct ListNode* head, int left, int right){
    struct ListNode nohead;//头节点 统一left为0的情况
    nohead.next = head;
    struct ListNode*prev = &nohead;
    while(--left)     --right,head=head->next,prev = prev->next;
    struct ListNode  *nextlist, *end = head; //记录临时结点
    while(right--){
        nextlist = head->next;
        head->next = prev->next;
        prev->next = head;  //头插法
        head=nextlist;
    }
    end->next = nextlist;
    return nohead.next;
}


加入头节点是经常用的方式,大家一定要学会使用。

五个月前的代码


struct ListNode * fanzhuan(struct ListNode *head){
    struct ListNode *p = head,*prev = NULL;
    while(p){
        head = p->next;
        p->next = prev;
        prev = p;
        p = head;
    }
    return prev;
}
struct ListNode* reverseBetween(struct ListNode* head, int left, int right){
    if(!head||!head->next) return head;
    int i =0;
    struct ListNode *prehead = (struct ListNode *)malloc(sizeof(struct ListNode)),*p = prehead,*prev,*hou,*temp;
    prehead->next = head;
    for(;i<left-1;i++) p = p->next;
    prev = p;
    for(;i<right;++i) p = p->next;
    hou = p->next;
    p->next = NULL;
    temp = prev->next;
    p = fanzhuan(prev->next);
    prev->next =p;
    temp->next = hou;
    return prehead->next;
}



其实感觉五个月前的代码更清晰,就是处理反转子串,然后连回来就好了,但是其实代码量有点大。大家自己取舍吧。


📑写在最后

今天就先这样,本来昨天打算开底层学习的,好家伙,上来就是开发板,完了一块垃圾版3000+,买不起,决定先跳过一部分内容,今天开始学习C++的东西,正好算法刷题也要用到,希望大家和我一起加油呀。


相关文章
|
9月前
|
存储 编译器 C语言
【数据结构】C语言实现带头双向循环链表万字详解(附完整运行代码)
【数据结构】C语言实现带头双向循环链表万字详解(附完整运行代码)
76 0
【数据结构】数组、双链表代码实现
【数据结构】数组、双链表代码实现
代码随想录Day03 | 链表基础1 LeetCode T203 移除链表元素 T707设计链表 T206 反转链表
代码随想录Day03 | 链表基础1 LeetCode T203 移除链表元素 T707设计链表 T206 反转链表
65 0
|
5月前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
8月前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
9月前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
44 0
|
9月前
|
存储
链表的实现(文末附完整代码)
链表的实现(文末附完整代码)
71 2
|
9月前
|
存储
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
|
9月前
在实现链表的代码中,为什么要使用继承而不是组合?
在实现链表的代码中,为什么要使用继承而不是组合?
49 3
|
9月前
|
设计模式 测试技术
在实现链表的代码中,为什么要使用`Node`类而不是直接在`LinkedList`类中定义节点?
在实现链表的代码中,为什么要使用`Node`类而不是直接在`LinkedList`类中定义节点?
76 1