单链表经典OJ题 :分割链表

单链表经典OJ题 :分割链表_第1张图片

题目:

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

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

图例:

单链表经典OJ题 :分割链表_第2张图片

本题的意思:

给定一个数值,让每一个节点的内部数据和该数值进行比较,比数值小的节点放在前端,和数值相等的节点放在后端,不在乎是否是有序排列。

解法:

由于本题有着数值之间的比较,和对节点进行顺序上的改动,所以我们选择创造两个链表。

创造的两个链表分别为大链表和小链表,大链表存放等于大于指定值的节点,小链表存放小于指定值的节点,最后把小链表中的最后一个节点中的指针指向大链表的第一个节点。

单链表经典OJ题:合并有序链表-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/2301_76445610/article/details/133913335?spm=1001.2014.3001.5501

  • 且根据之前合并有序链表的经验,我们为了避免代码的重复性,选择使用两条带头链表,以此避免对链表是否为空的重复判断。

单链表经典OJ题 :分割链表_第3张图片

注意:

  • 因为创建的是带头链表,所以小链表最终指向的是大链表的第二个节点,且最后返回的是小链表的第二个节点。
  • 以及,我们最后要释放大小链表的带头部分,也就是第一个不能存放数值的节点的空间。

代码演示:

 单链表经典OJ题 :分割链表_第4张图片

  • 在释放带头节点的时候,记得使用临时变量进行删除,当然,对于大链表的带头空间可以直接删除,因为大链表的其他节点以及有指针指向了。
  • 而小链表的带头节点空间内部仍然指向小链表的第一个有效节点,删除了就找不到了,所以使用临时变量进行寄存,然后释放带头空间。

你可能感兴趣的:(数据结构,C语言,OJ题,链表,数据结构,c语言)