#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct LNode{
int data;
LNode *next;
}LNode,*LinkList;
void CreatLinkList(LinkList &L){
LNode *r,*s;
L=(LinkList)malloc(sizeof(LNode));
int n;
cin>>n;
s=L;
while(n--){
r=(LNode*)malloc(sizeof(LNode));
cin>>r->data;
s->next=r;
s=r;
}
s->next=NULL;
}
void showList(LinkList L){
LinkList r;
r=L->next;
while(r){
cout<<r->data<<" ";
r=r->next;
}
cout<<endl;
}
void Link_PX(LinkList &L){
if(!L->next) //若链表为空直接退出
return;
LNode *r,*s,*pre,*p;
r=L->next;
p=r->next; //记录链表
s=L->next;
s->next=NULL;
L->next=s; //初始化L链表,链表中进入第一个节点。
while(p){ //遍历剩下的链表节点 (PS:此时从第二个节点开始,第一个已经入链。)
s=p->next; //记录剩下的节点,防止链表断链
p->next=NULL;//拆出单个节点
pre=L;
r=L->next;
while(r){ //遍历新链表,遇到比新节点大的点直接插在该点的前面
if(p->data<r->data){
p->next=r;
pre->next=p;
break;
}
if(r->next==NULL){ //若一直没有遇到,到了链表的尾部,则插入到尾部
r->next=p;
break;
}
r=r->next; //链表向后移动
pre=pre->next;
}
p=s; //遍历剩余节点
}
}
int main(){
LinkList L;
CreatLinkList(L);
Link_PX(L);
showList(L);
return 0;
}
将单链表置为递增有序的链表(带头节点的)
最新推荐文章于 2021-08-19 23:15:13 发布