当前位置:   article > 正文

C语言笔记33 •单链表经典算法OJ题-5.分割链表•

C语言笔记33 •单链表经典算法OJ题-5.分割链表•

分割链表

1.问题

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你不需要 保留 每个分区中各节点的初始相对位置

2.代码实现

  1. //5.分割链表
  2. #define _CRT_SECURE_NO_WARNINGS 1
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <assert.h>
  6. typedef int SLTDataType;
  7. typedef struct SListnode
  8. {
  9. SLTDataType val;
  10. struct SListnode* next;
  11. }ListNode;
  12. ListNode* createNode(SLTDataType val)
  13. {
  14. ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
  15. if (newnode == NULL)
  16. {
  17. perror("malloc");
  18. exit(1);
  19. }
  20. newnode->val = val;
  21. newnode->next = NULL;
  22. return newnode;
  23. }
  24. struct ListNode* partition(struct ListNode* head, int x)
  25. {
  26. ListNode* pcur = head;
  27. ListNode* Lhead = (ListNode*)malloc(sizeof(ListNode));
  28. ListNode* Hhead = (ListNode*)malloc(sizeof(ListNode));
  29. ListNode* L1 = Lhead;
  30. ListNode* L2 = Hhead;
  31. while (pcur)
  32. {
  33. if (pcur->val < x)
  34. {
  35. L1->next = pcur;//L1相当于Lhead的末尾结点指针(初始状态都是链表的头),每进循环一次,往前走一步
  36. L1 = L1->next;
  37. }
  38. else
  39. {
  40. L2->next = pcur;//L2相当于Hhead的末尾结点指针(初始状态都是链表的头),每进循环一次,往前走一步
  41. L2 = L2->next;
  42. }
  43. pcur = pcur->next;
  44. }
  45. L2->next = NULL;//修改Hhead链表 末尾节点指向的指针进行初始化,如果没有这个,代码可能就会出现死循环 因为不确定head最后一个节点是否为Hhead链表的最后一个节点,为了保险起见 就使L2->next = NULL
  46. L1->next = Hhead->next;
  47. return Lhead->next;
  48. }
  49. int main()
  50. {
  51. ListNode* node1, * node2, * node3, * node4, * node5, * node6;
  52. node1 = createNode(1);
  53. node2 = node1->next = createNode(4);
  54. node3 = node2->next = createNode(3);
  55. node4 = node3->next = createNode(2);
  56. node5 = node4->next = createNode(5);
  57. node6 = node5->next = createNode(5);//创建一个链表
  58. ListNode* newhead = partition(node1, 3);
  59. while (newhead)
  60. {
  61. printf("%d ", newhead->val);
  62. newhead = newhead->next;
  63. }
  64. return 0;
  65. }

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

闽ICP备14008679号