2021-07-10

c++单链表创建,插入,删除,遍历

初学数据结构,还请大佬指正

#include<iostream>

using namespace std;

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


void creatHeadList(ListNode* List) //头插法
{	
	List->next = NULL;   //List:头结点   List->next: 第一个结点
	for (int i = 0; i < 10; i++)
	{	
		ListNode *p = new ListNode;
		p->data = i;
		p->next = List->next;
		List->next = p;
	}
}

void createTailList(ListNode* List) //尾插法
{
	ListNode* tail = List; //tail为指向尾部的结点
	for (int i = 0; i < 10; i++)
	{
		ListNode* p = new ListNode;  //创建新结点
		p->data = i;
		tail->next = p;
		tail = p;  //更新尾部节点
	}
	tail->next = NULL;  //将尾结点置空
}

void deleteAllList(ListNode* List)  //删除整个链表
{
	ListNode* p = List->next;
	ListNode*q = new ListNode;  //遍历寻找第pos-1个结点
	while (p)
	{
		q = p->next;
		delete p;
		p = q;
	}
	List->next = NULL;
}

void InsertList(ListNode* List, int pos, int val) //在第pos个结点位置之前插入val元素
{
	ListNode* p = List;
	int i = 1;
	while (p && i < pos)
	{
		p = p->next;
		++i;
	}
	if (!p || i > pos)
	{
		cout << "第" << pos << "个结点不存在" << endl;
		return;
	}
		
	ListNode *pNewNode = new ListNode;

	pNewNode->data = val;
	pNewNode->next = p->next;
	p->next = pNewNode;
	cout << "插入成功!" << endl;
}

void deleteSingleList(ListNode* List, int pos) //删除第pos个结点,并返回它的值
{
	ListNode* p = List;  //指向头结点
	int i = 1;
	while (p->next && i < pos) //遍历寻找第pos-1个结点
	{
		p = p->next;
		++i;
	}
	if (!(p->next) || i > pos)
	{
		cout << "第" << pos << "个结点不存在" << endl;
		return;
	}
	ListNode* q = new ListNode;
	q = p->next;
	p->next = q->next;
	
	delete q;
}

int ListLength(ListNode* List)  //计算链表元素个数
{
	int length = 0;
	ListNode* p = List->next;  //指向第一个元素
	while (p)
	{
		p = p->next;
		++length;
	}
	return length;
}
void printList(ListNode* List)
{	
	ListNode* p = new ListNode;
	p = List->next;
	while (p != NULL)
	{	
		cout << p->data << endl;
		p = p->next;
	}
}
int main()
{
	ListNode* List = new ListNode;
	
	List->next = NULL;
	
	
	createTailList(List);
	printList(List);
	int length = ListLength(List);
	cout <<"length = " << length << endl;

	//InsertList(List, 6, 11);
	
	printList(List);
	length = ListLength(List);
	cout << "length = " << length << endl;
	
	//cout << "已删除" << *val << endl;
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值