C/C++单链表基准拆分

本文介绍了一个简单的链表实现,并演示了如何通过用户输入创建链表及按升序拆分链表的过程。文章提供了完整的C++代码示例,包括链表节点的定义、链表的创建、数据的输入及输出,以及按指定基准值进行链表拆分的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
using namespace std;
class List
{
private:
	typedef struct list
	{
		int data;
		list *next;
	}*PList;
	PList head, last;//头和尾指针
public:
	
	List()//初始化头和尾指针
	{
		head = new list;
		head->next = NULL;
		last = head;
	}
	void CreatList()
	{
		int n;
		cout << "元素个数为" << endl;
		cin >> n;
		cout << "输入元素" << endl;
		PList temp;//临时结点,用来数据的输入
		
		for (int i = 0; i < n; ++i)
		{
			
			temp = new list;
			cin>>temp->data;
			
			last->next = temp;
			last = temp;
		}
		last->next = NULL;
		cout << "创建完成" << endl;
	}
	void OutPut()
	{
		cout << "结果为" << endl;
		for (PList p = head->next; p; p = p->next)
			cout << p->data << endl;
	}
	//升序插分
	//先用临时变量p记录链表数据,断开数据与头指针的连接,
	//若大于基准就用头插法插入该数据,再用q记录p的下一个防止链表丢失
	void Division()//拆分
	{
		PList p = head->next;
		PList q;
		head->next = NULL;
		last = head;
		cout << "输入拆分的基准" << endl;
		int x;
		cin >> x;
		while (p)
		{
			if (p->data < x)//头插法
			{
				q = p->next;
				p->next = head->next;
				head->next = p;
				if (p->next == NULL)last = p;//第一次插入时记得尾指针要向后移
				p = q;//令p=下一个要拆分的元素
			}
			else//尾插法
			{
				last->next = p;
				last = p;
				p = p->next;//因为尾插法p与下一个数据没有断开连接
			}
		}
		last->next = NULL;
		cout << "拆分后结果为" << endl;
		OutPut();
	}
};
int main()
{
	List L;
	L.CreatList();
	L.OutPut();
	L.Division();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值