链表OJ6——链表分割(C++代码实现)

声明:我的链表OJ系列是针对无头单向不循环链表的题目

题目

题目来源:链表分割_牛客题霸_牛客网

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针

思路

创建两个链表,遍历一遍传入的链表,将值大于x的结点和值小于x的结点依次尾插到两个链表中,最后再将这两个链表链接起来,并返回第一个结点的位置即可。

1.把小于x的结点尾插到less链表,把大于x的结点尾插到greater链表。

2.将less链表与greater链表链接起来。

 注意:
1.链接后的链表的最后一个结点的指针域需要置空,否则可能造成链表成环。
2.返回的头指针应是lessHead->next,而不是lessHead。

struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};

class Partition {
public:
	ListNode* partition(ListNode* pHead, int x) {
		ListNode* greaterHead, *greaterTail, *lessHead, *lessTail;
		//申请一个头结点,后面链接大于x的结点
		greaterHead = greaterTail = (ListNode*)malloc(sizeof(struct ListNode));
		//申请一个头结点,后面链接小于x的结点
		lessHead = lessTail = (ListNode*)malloc(sizeof(struct ListNode));
		greaterTail->next = NULL;//尾指针的指针域置空
		lessTail->next = NULL;//尾指针的指针域置空
		ListNode* cur = pHead;//接收传入的链表,准备遍历
		while (cur)
		{
			if (cur->val < x)
			{
				//结点值小于x,链接到less链表后面
				lessTail->next = cur;
				lessTail = lessTail->next;
			}
			else
			{
				//结点值大于x,链接到greater链表后面
				greaterTail->next = cur;
				greaterTail = greaterTail->next;
			}
			cur = cur->next;//指针后移,遍历后面的结点
		}
		//将less链表和greater链表链接起来
		lessTail->next = greaterHead->next;//greater链表的第一个结点链接到less链表的尾上
		greaterTail->next = NULL;//将greater链表最后一个结点的指针域置空
		ListNode* head = lessHead->next;//接收链接后链表的第一个结点地址
		free(greaterHead);//释放greater链表的头结点
		free(lessHead);//释放less链表的头结点
		return head;//返回新链表
	}
};

相关推荐

  1. c实现

    2024-04-25 00:02:02       41 阅读
  2. C语言 分割

    2024-04-25 00:02:02       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 00:02:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 00:02:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 00:02:02       82 阅读
  4. Python语言-面向对象

    2024-04-25 00:02:02       91 阅读

热门阅读

  1. 【Python】如何在Ubuntu上设置Python脚本开机自启

    2024-04-25 00:02:02       38 阅读
  2. 深入理解汇编:平栈、CALL和RET指令详解

    2024-04-25 00:02:02       37 阅读
  3. 1019 数字黑洞

    2024-04-25 00:02:02       34 阅读
  4. C++:函数符(一)

    2024-04-25 00:02:02       33 阅读
  5. swift语言学习总结

    2024-04-25 00:02:02       26 阅读
  6. Qt 运行 Android 程序时找不到 Toou2D 库闪退

    2024-04-25 00:02:02       28 阅读
  7. c# 值类型和引用类型的区别

    2024-04-25 00:02:02       32 阅读
  8. [杂谈] [杂谈]老实人要突破的想法,显眼包?

    2024-04-25 00:02:02       31 阅读
  9. python常见语法

    2024-04-25 00:02:02       37 阅读