0
点赞
收藏
分享

微信扫一扫

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

时光已翩然轻擦 2022-04-04 阅读 53

请添加图片描述

☘前言☘

今天的题目也不难,就基本的贪心硬贪就好了。希望有想要提高的同学跟我们一起来刷题0.0
4.4日每日一题——反转链表II


全文目录


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++的东西,正好算法刷题也要用到,希望大家和我一起加油呀。

举报

相关推荐

0 条评论