#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;
}
逆序链表笔记图: