1. 程式人生 > >連結串列插入(線性表)

連結串列插入(線性表)

題目描述

(線性表)已知一單鏈表,從第二個結點至表尾遞增有序,(設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

分析:

此題,考察連結串列的插入。基本思想只要是判斷,在插入。

#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;
        }

    }
}