链表的分割

发布时间:2024年01月19日

链表的分割

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/partition-list-lcci/submissions/496780619/

给你一个链表的头节点?head?和一个特定值?x?,请你对链表进行分隔,使得所有?小于?x?的节点都出现在?大于或等于?x?的节点之前。

你不需要?保留?每个分区中各节点的初始相对位置。

思路:
弄两个链表然后合到一块。

易错点:‘

结束时greaterTail是和cur(lessTail)连着的,构成了一个环,所以应置空。’

不置空会报错

代码:

struct ListNode* partition(struct ListNode* head, int x){
       struct ListNode*lessHead,*lessTail,*greaterHead,*greaterTail;
       lessHead=lessTail=(struct ListNode*)malloc(sizeof(struct ListNode));
       lessTail->next=NULL;
       greaterHead=greaterTail=(struct ListNode*)malloc(sizeof(struct ListNode));
       greaterTail->next=NULL;
       struct ListNode*cur=head;
       while(cur){
           if(cur->val<x){
               lessTail->next=cur;
               lessTail=cur;
           }
           else{
               greaterTail->next=cur;
               greaterTail=cur;
           }
           cur=cur->next;
       }
       lessTail->next=greaterHead->next;
       //greaterTail->next=NULL;
       struct ListNode*newHead=lessHead->next;
       free(lessHead);
       free(greaterHead);
       return newHead;
}

文章来源:https://blog.csdn.net/2301_77479435/article/details/135703496
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。