题目描述
(线性表)已知一单链表,从第二个结点至表尾递增有序,(设a1<x<an)如下图(“第二个结点至表尾”指a1…an )。试编写程序,将第一个结点删除并插入表中适当位置,使整个链表递增有序。
输入
输入长度n:7
输入数据:4 1 2 3 6 8 9
输出
1 2 3 4 6 8 9
样例输入
5
11 7 8 9 10
样例输出
7 8 9 10 11
扫描二维码关注公众号,回复:
4619213 查看本文章
分析:
此题,考察链表的插入。基本思想只要是判断,在插入。
#include"stdio.h"
#include"string.h"
typedef struct a{
int node;
struct a *next;
}*LinkList,Node;
void CreatListTail(LinkList *T,int n)
{ int i;
LinkList p,r;
*T=(LinkList)malloc(sizeof(Node));
r=*T;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
scanf("%d",&(p->node));
r->next=p;
r=p;
}
r->next=NULL;
}
int main()
{
LinkList head,T,pre,NODE;
int i,j,k;
int n;
while(~scanf("%d",&n))
{
CreatListTail(&head,n);
T=head->next->next;
NODE=head->next;
pre=head->next;
// printf("T->node=%d\n",T->node);
while(T!=NULL&&NODE->node>T->node)
{ pre=T;
T=T->next;
}
//printf("T->node=%d\n",T->node);
if(NODE->next!=T)
{
head->next=NODE->next;
NODE->next=T;
pre->next=NODE;
}
head=head->next;
while(head!=NULL)
{
printf("%d ",head->node);
head=head->next;
}
}
}