c++链表

单链表基础操作

#include <iostream>
#include <time.h>
using namespace std;


struct Node
{
	int data;
	struct Node *next;
};

typedef struct Node *LinkList;	//定义LinkList类型

// 创建链表
// 头插法
void CreateListHead(LinkList *L, int n)
{
	LinkList p;
	int i;
						
	*L = new Node;		//创建带结节点的单链表
	(*L)->next = NULL;

	for (i = 0; i < n; i++) {
		p = new Node();
		p->data = i;
		p->next = (*L)->next;
		(*L)->next = p;
	}
}

// 尾插法
void CreateListTail(LinkList *L, int n)
{
	LinkList p, r;
	int i;

	*L = new Node;
	r = *L;

	for (i = 0; i < n; i++) {
		p = new Node;
		p->data = i;
		r->next = p;
		r = p;
	}
	r->next = NULL;
}

//读取链表第i个数据
void GetData(LinkList L, int i, int *data)
{
	LinkList p;
	p = L->next;
	int j = 1;

	while (p && j < i)
	{
		p = p->next;
		++j;
	}

	if (!p || j > i)
	{
		cout << "the data is not find" << endl;
		return;
	}

	*data = p->data;
}

// 链表插入
void ListInsert(LinkList *L, int i, int data)
{
	LinkList p, s;
	p = *L;
	int j = 1;

	while (p && j < i)
	{
		p = p->next;
		++j;
	}

	if (!p || j > i)
	{
		cout << "not exist" << endl;
		return;
	}

	s = new Node();		// 插入的节点
	s->data = data;
	s->next = p->next;
	p->next = s;
}

// 链表第i个数据删除
void ListDelete(LinkList *L, int i)
{
	LinkList p, s;
	p = *L;
	int j = 1;

	while (p && j < i)
	{
		p = p->next;
		++j;
	}

	if (!(p->next) || j > i)
	{
		cout << "not exist" << endl;
	}

	s = p->next;		// 删除的节点
	p->next = s->next;

	delete(s);
}

// 删除整表
void ClearList(LinkList *L)
{
	LinkList p, q;
	p = (*L)->next;

	while (p)
	{
		q = p->next;
		delete(p);
		p = q;
	}

	(*L)->next = NULL;	// 头结点指针域为空
	cout << "delete completed" << endl;
}

// 打印链表数据
void PrintList(LinkList L)
{
	LinkList p;
	p = L->next;

	if (!p)
	{
		cout << "List is empty" << endl;
	}

	while (p)
	{
		cout << p->data<<endl;
		p = p->next;
	}
	
}

循环链表基础操作

#include <iostream>
#include <time.h>
using namespace std;


struct Node
{
	int data;
	struct Node *next;
};

typedef struct Node *LinkList;	//定义LinkList类型

// 创建链表
// 尾插法
void CreateListTail(LinkList *L, int n)
{
	LinkList p, r;
	int i;

	*L = new Node;
	r = *L;

	for (i = 0; i < n; i++) {
		p = new Node;
		p->data = i;
		r->next = p;
		r = p;
	}
	r->next = *L;
}

// 返回尾指针
void TailPtr(LinkList L, LinkList *rear)
{
	LinkList p;
	p = L->next;
	while (p->next != L)
	{
		p = p->next;
	}
	*rear = p;
}

// 合并两个链表
void MergeList(LinkList *L1, LinkList *L2)
{
	LinkList p, q, rear1, rear2;
	// 获取尾指针
	TailPtr(*L1, &rear1);
	TailPtr(*L2, &rear2);
	
	p = rear1->next;	//保存L1头结点
	rear1->next = rear2->next->next;		//L1尾结点连接L2第一个数据
	q = rear2->next;	//L2头结点
	rear2->next = p;	//连接L2尾结点和L1头结点,形成循环链表
	delete(q);			//删除L2头结点
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值