leetcode每日一题37

92.反转链表II

这道题需要1.找到位置left 2.在位置left开始,一前一后两个指针反转链表,代码同206.反转链表,直到后一个指针指向right 3.把反转后的头节点链接到left-1后面,把反转后的链表尾节点指向right+1位置的节点
因为可能会反转head指向的节点
所以需要重新构造一个头节点指向head
防止头节点位置改变

		ListNode* dummy = new ListNode(0);
        dummy->next = head;

然后for循环先找到left

ListNode* pre = dummy;
        ListNode* cur=head;
        ListNode* next=nullptr;
        for(int i=1;i<=right;i++)
        {
   
            if(i<left){
   
              pre=pre->next;
              cur=cur->next;
            }
        }

cur节点指向left位置的节点,使用反转链表反转直到cur指向right

ListNode* pre = dummy;
        ListNode* cur=head;
        ListNode* next=nullptr;
        for(int i=1;i<=right;i++)
        {
   
            if(left<=i&&right>=i)
            {
   
                ListNode* tmp=cur->next;
                cur->next=next;
                next=cur;
                cur=tmp;
            }
            else if(i<left){
   
              pre=pre->next;
              cur=cur->next;
            }
        }

接着链接头尾和反转链表
pre指向left-1的位置
pre的下一个指针,也就是反转前的left位置,此时,该指针指向反转链表的尾部
因此,将反转链表的尾部指向right+1的位置,也就是cur
让pre指向反转链表头节点,也就是next

		pre->next->next = cur;
        pre->next = next;

143.重排链表

双指针求中点+双指针反转链表
从开头出发,快指针走两步,慢指针走一步
快指针走到尾巴的时候,慢指针走到中点

		ListNode* left=head;
        ListNode* right=head;
        if(head==NULL&&head->next==NULL)
            return;
        while(right->next!=NULL&&right->next->next!=NULL)
        {
   
            right=right->next;
            right=right->next;
            left=left->next;
        }

在纸上模拟一下寻找的过程,我们就知道链表中无论是偶数个节点还是奇数个节点,left永远指向左半边链表的最后一个节点
接着我们反转后半部分链表,也就是left->next的部分
使用一前一后两个指针
后一个节点指向前一个节点
等节点指向链表尾部,就结束了
不过我们首先也要把前半段节点末尾改成指向NULL

		ListNode* cur=left->next;
        left->next=NULL;
        ListNode* pre=NULL;
        while(cur!=NULL)
        {
   
            ListNode* tmp=cur->next;
            cur->next=pre;
            pre=cur;
            cur=tmp;
        }

两端链表都准备好了,接下来就是合并两个链表
两个指针分别指向两个链表的头节点
挨个合并

cur=pre;
        pre=head;
        while(pre!=NULL&&cur!=NULL)
        {
   
            ListNode* tmp=pre->next;
            pre->next=cur;
            right=cur->next;
            cur->next=tmp;
            cur=right;
            pre=tmp;
        }

最后得到整个代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
   
public:
    void reorderList(ListNode* head) {
   
        ListNode* left=head;
        ListNode* right=head;
        if(head==NULL&&head->next==NULL)
            return;
        while(right->next!=NULL&&right->next->next!=NULL)
        {
   
            right=right->next;
            right=right->next;
            left=left->next;
        }
        ListNode* cur=left->next;
        left->next=NULL;
        ListNode* pre=NULL;
        while(cur!=NULL)
        {
   
            ListNode* tmp=cur->next;
            cur->next=pre;
            pre=cur;
            cur=tmp;
        }
        cur=pre;
        pre=head;
        while(pre!=NULL&&cur!=NULL)
        {
   
            ListNode* tmp=pre->next;
            pre->next=cur;
            right=cur->next;
            cur->next=tmp;
            cur=right;
            pre=tmp;
        }
    }
};

相关推荐

  1. leetcode每日37

    2023-12-08 07:12:03       41 阅读
  2. leetcode每日38

    2023-12-08 07:12:03       40 阅读
  3. LeetCode每日 | LCP 30. 魔塔游戏

    2023-12-08 07:12:03       33 阅读
  4. LeetCode 每日 2024/3/25-2024/3/31

    2023-12-08 07:12:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 07:12:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 07:12:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 07:12:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 07:12:03       20 阅读

热门阅读

  1. 神经网络----网络模型的加载及保存

    2023-12-08 07:12:03       31 阅读
  2. ffmpeg学习日记619-指令-透明通道视频相关指令

    2023-12-08 07:12:03       34 阅读
  3. 低代码:美味膳食或垃圾食品?

    2023-12-08 07:12:03       38 阅读
  4. python对py文件加密

    2023-12-08 07:12:03       42 阅读
  5. python中的配置config模块

    2023-12-08 07:12:03       39 阅读
  6. C# 异步

    2023-12-08 07:12:03       34 阅读
  7. 2023-简单点-python的多路复用小例子

    2023-12-08 07:12:03       44 阅读
  8. 在 CentOS 或 Red Hat 系统上安装 Citus 组件

    2023-12-08 07:12:03       41 阅读