单链表创建-遍历-排序-插入-删除-逆序操作

#include <iostream>
using namespace std;

typedef struct NodeType
{
	int data;
	NodeType* pNext;
}NodeType;
//链表的1创建 2 遍历 3排序 4 插入 5 删除
NodeType* create_list();
void traverse_list(NodeType* pHead);
void sort_list(NodeType* pHead);
void insert_list(NodeType*,int pos,int val);
void delete_list(NodeType*,int pos);

NodeType* reverse_list(NodeType* pHead);


int main()
{
	NodeType* pHead=create_list();
	//insert_list(pHead,1,33);
	//traverse_list(pHead);
	//delete_list(pHead,1);
	pHead=reverse_list(pHead);
	traverse_list(pHead);
	return 0;
}
//*****************创建链表*************************************************/
NodeType* create_list()
{
	cout <<" 输入创建节点个数" <<endl;
	int len;
	int val;
	cin >> len;
	if (len<=0)
	{exit(-1);}
	NodeType* pHead=new NodeType;
	NodeType* p=pHead;
	for (int i=0;i<len;i++)
	{
		cin >>val;
		NodeType* pNew=new NodeType;
		pNew->data=val;
		pNew->pNext=NULL;
		p->pNext=pNew;
		p=pNew;
	}
	return pHead;
}
//*****************遍历链表*************************************************/
void traverse_list(NodeType* pHead)
{
	for (NodeType*p=pHead->pNext;p!=NULL;p=p->pNext)
	{
		cout << p->data << " ";
	}
	cout << endl;
}
/*****************排序链表*************************************************/
void sort_list(NodeType* pHead)
{
	NodeType* p=pHead->pNext;
	NodeType* pTail;
	for (;p->pNext!=NULL;p=p->pNext)
	{
		for (pTail=p->pNext;pTail!=NULL;pTail=pTail->pNext)
		{
			if((p->data)>(pTail->data))
			{
				swap(p->data,pTail->data);
			}
		}
	}
}
/*****************插入链表*************************************************/
void insert_list(NodeType* pHead,int pos,int val)
{
	//不仅仅是判断条件,而且还有定位p(插入点位置前一个位置)
	NodeType* p=pHead;
	for (int i=0;p!=NULL&&i<pos-1;p=p->pNext)
	{
		++i;
	}
	//插入 就插入一个节点
	NodeType* pNew=new NodeType;
	pNew->data=val;

	pNew->pNext=p->pNext;
	p->pNext=pNew;
}

/*****************插入链表*************************************************/
void delete_list(NodeType* pHead,int pos)
{
	NodeType* p=pHead;
	for ( int i=0;i<pos-1&&p!=NULL;p=p->pNext,i++)
	{
	}
	NodeType* q=p->pNext;
	p->pNext=p->pNext->pNext;
	delete q;

}
/*****************逆序链表*************************************************/
NodeType* reverse_list(NodeType* pHead)
{
	NodeType* p1,*p2,*p3;
	if (pHead==NULL||pHead->pNext==NULL)
	{
		return pHead;
	}
	p1=pHead->pNext;
	p2=p1->pNext;
	p1->pNext=NULL;
	while (p2)
	{
		p3=p2->pNext;
		p2->pNext=p1;
		p1=p2;
		p2=p3;
	}
	pHead->pNext=p1;
	return pHead;
}

逆序链表笔记图:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值