题目:
给你一个链表的头节点 head 和一个特定值 x,请你对链表进行分隔,使得所有小于x 的节点都出现在 大于或等于 x 的节点之前。
你不需要保留 每个分区中各节点的初始相对位置。
图例:
本题的意思:
给定一个数值,让每一个节点的内部数据和该数值进行比较,比数值小的节点放在前端,和数值相等的节点放在后端,不在乎是否是有序排列。
解法:
由于本题有着数值之间的比较,和对节点进行顺序上的改动,所以我们选择创造两个链表。
创造的两个链表分别为大链表和小链表,大链表存放等于大于指定值的节点,小链表存放小于指定值的节点,最后把小链表中的最后一个节点中的指针指向大链表的第一个节点。
单链表经典OJ题:合并有序链表-CSDN博客https://blog.csdn.net/2301_76445610/article/details/133913335?spm=1001.2014.3001.5501
- 且根据之前合并有序链表的经验,我们为了避免代码的重复性,选择使用两条带头链表,以此避免对链表是否为空的重复判断。
注意:
- 因为创建的是带头链表,所以小链表最终指向的是大链表的第二个节点,且最后返回的是小链表的第二个节点。
- 以及,我们最后要释放大小链表的带头部分,也就是第一个不能存放数值的节点的空间。
代码演示:
- 在释放带头节点的时候,记得使用临时变量进行删除,当然,对于大链表的带头空间可以直接删除,因为大链表的其他节点以及有指针指向了。
- 而小链表的带头节点空间内部仍然指向小链表的第一个有效节点,删除了就找不到了,所以使用临时变量进行寄存,然后释放带头空间。