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

分割链表

1.问题

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

2.代码实现

cpp 复制代码
//5.分割链表
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>



typedef int SLTDataType;

typedef struct SListnode
{
	SLTDataType val;
	struct SListnode* next;
}ListNode;

ListNode* createNode(SLTDataType val)
{
	ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
	if (newnode == NULL)
	{
		perror("malloc");
		exit(1);
	}
	newnode->val = val;
	newnode->next = NULL;
	return newnode;
}



struct ListNode* partition(struct ListNode* head, int x)
{
	ListNode* pcur = head;
	ListNode* Lhead = (ListNode*)malloc(sizeof(ListNode));
	ListNode* Hhead = (ListNode*)malloc(sizeof(ListNode));

	ListNode* L1 = Lhead;
	ListNode* L2 = Hhead;


	while (pcur)
	{
		if (pcur->val < x)
		{
			L1->next = pcur;//L1相当于Lhead的末尾结点指针(初始状态都是链表的头),每进循环一次,往前走一步
			L1 = L1->next;
		}
		else
		{
			L2->next = pcur;//L2相当于Hhead的末尾结点指针(初始状态都是链表的头),每进循环一次,往前走一步
			L2 = L2->next;
		}
		pcur = pcur->next;
	}
	L2->next = NULL;//修改Hhead链表 末尾节点指向的指针进行初始化,如果没有这个,代码可能就会出现死循环 因为不确定head最后一个节点是否为Hhead链表的最后一个节点,为了保险起见 就使L2->next = NULL
	L1->next = Hhead->next;

	return Lhead->next;
}

int main()
{
	ListNode* node1, * node2, * node3, * node4, * node5, * node6;

	node1 = createNode(1);
	node2 = node1->next = createNode(4);
	node3 = node2->next = createNode(3);
	node4 = node3->next = createNode(2);
	node5 = node4->next = createNode(5);
	node6 = node5->next = createNode(5);//创建一个链表

	ListNode* newhead = partition(node1, 3);

	while (newhead)
	{
		printf("%d ", newhead->val);
		newhead = newhead->next;
	}

	return 0;
}
相关推荐
龙鸣丿2 小时前
Linux基础学习笔记
linux·笔记·学习
pianmian14 小时前
python数据结构基础(7)
数据结构·算法
Nu11PointerException4 小时前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
亦枫Leonlew6 小时前
三维测量与建模笔记 - 3.3 张正友标定法
笔记·相机标定·三维重建·张正友标定法
考试宝6 小时前
国家宠物美容师职业技能等级评价(高级)理论考试题
经验分享·笔记·职场和发展·学习方法·业界资讯·宠物
好奇龙猫6 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20247 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
香菜大丸7 小时前
链表的归并排序
数据结构·算法·链表
jrrz08287 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表