C语言/数据结构——每日一题(分割链表)

一.前言

今天在LeetCode觉得很不错,想和大家们一起分享这道链表题——分割链表:https://leetcode.cn/problems/partition-list-lcci废话不多说,让我们直接进入正题吧。

二.正文

1.1题目描述

1.2题目分析

大致思路:我们可以通过建立两个链表,一个小链表,一个大链表。

当原链表在遍历的过程中,如果该数据小于x,我们就把该节点尾插到小链表中。

反之,当该节点大于等于x,我们就把该节点尾插大链表中。

解题步骤:1.对于小链表,我们创建了lessphead用于指向小链表的头节点,lessptail用于指向小链表的尾节点。

对于大链表,我们创建了graterphead用于指向小链表的头节点,graterptail用于指向小链表的尾节点。

并且我们用malloc申请到了两块节点空间。分别让小链表的lessphead,lessptail和大链表的graterphead,gerterptail各自指向一块申请来的节点空间。(这里的作用是充当哨兵位)

2.这一块就是我们的大致思路差不多:当原链表在遍历的过程中,如果该数据小于x,我们就把该节点尾插到小链表中。

反之,当该节点大于等于x,我们就把该节点尾插大链表中。

3.我们需要把大链表中的graterptail置为NULL。这一点很重要!!!否则返回答案的时候不仅会死循环还会有报错。

同时需要注意的是:我们申请的两块节点空间最好返还给操作系统,并让对应指针置为NULL。在归还空间之前,需要定义一个变量把lessphead->next存起来。这样做的目的是,防止出现报错,因为在我们归还空间的时候,会把lessphead和graterphead置为NULL。此时如果答案返回是lessphead->next,肯定会报错。

1.3代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode* partition(struct ListNode* head, int x)
{
    if(head==NULL)
    {
        return head;
    }
ListNode* lessphead,*lessptail;
ListNode* graterphead,*graterptail;
lessphead=(ListNode*)malloc(sizeof(ListNode));
graterphead=(ListNode*)malloc(sizeof(ListNode));
lessptail=lessphead;
graterptail=graterphead;
ListNode* pcur=head;
while(pcur)
{
    if(pcur->val<x)
    {
        lessptail->next=pcur;
        lessptail=lessptail->next;
    }
    else
    {
        graterptail->next=pcur;
        graterptail=graterptail->next;
    }
    pcur=pcur->next;
}
graterptail->next=NULL;
lessptail->next=graterphead->next;
ListNode* ret=lessphead->next;
free(lessphead);
free(graterphead);
lessphead=graterphead=NULL;
return ret;
}

注意该代码是在LeetCode环境下运行的。

三.结言

今天的题目分享就到这了,帅哥美女们咱们下期再见。拜拜。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 15:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 15:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 15:18:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 15:18:02       20 阅读

热门阅读

  1. 字符判断(数字&字母)

    2024-05-04 15:18:02       13 阅读
  2. 内存管理

    2024-05-04 15:18:02       16 阅读
  3. 5G图标显示分析二

    2024-05-04 15:18:02       12 阅读
  4. C++ primer笔记

    2024-05-04 15:18:02       12 阅读
  5. Spring MVC:深入剖析与应用实践

    2024-05-04 15:18:02       14 阅读
  6. [Rust] 打印变量类型

    2024-05-04 15:18:02       14 阅读
  7. Spring Cloud原理详解

    2024-05-04 15:18:02       13 阅读
  8. UDP!!!

    UDP!!!

    2024-05-04 15:18:02      11 阅读
  9. sql注入手注语句

    2024-05-04 15:18:02       12 阅读
  10. Shell脚本基础知识

    2024-05-04 15:18:02       11 阅读