当前位置:   article > 正文

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

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代码实现

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. typedef struct ListNode ListNode;
  9. struct ListNode* partition(struct ListNode* head, int x)
  10. {
  11. if(head==NULL)
  12. {
  13. return head;
  14. }
  15. ListNode* lessphead,*lessptail;
  16. ListNode* graterphead,*graterptail;
  17. lessphead=(ListNode*)malloc(sizeof(ListNode));
  18. graterphead=(ListNode*)malloc(sizeof(ListNode));
  19. lessptail=lessphead;
  20. graterptail=graterphead;
  21. ListNode* pcur=head;
  22. while(pcur)
  23. {
  24. if(pcur->val<x)
  25. {
  26. lessptail->next=pcur;
  27. lessptail=lessptail->next;
  28. }
  29. else
  30. {
  31. graterptail->next=pcur;
  32. graterptail=graterptail->next;
  33. }
  34. pcur=pcur->next;
  35. }
  36. graterptail->next=NULL;
  37. lessptail->next=graterphead->next;
  38. ListNode* ret=lessphead->next;
  39. free(lessphead);
  40. free(graterphead);
  41. lessphead=graterphead=NULL;
  42. return ret;
  43. }

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

三.结言

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/533299
推荐阅读
相关标签
  

闽ICP备14008679号