链表插入(线性表)

题目描述

(线性表)已知一单链表,从第二个结点至表尾递增有序,(设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;
        }

    }
}

猜你喜欢

转载自blog.csdn.net/qq_43506138/article/details/85009674