PTA 6-5 递增的整数序列链表的插入

本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。

函数接口定义:

List Insert( List L, ElementType X );

其中List结构定义如下:

typedef struct Node PtrToNode;
struct Node {
ElementType Data; /
存储结点数据 /
PtrToNode Next; /
指向下一个结点的指针 /
};
typedef PtrToNode List; /
定义单链表类型 */

L是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Insert要将X插入L,并保持该序列的有序性,返回插入后的链表头指针。

有四个测试点,分别对应

1.最正常的情况:插在中间,无重复元素
2. 小于第一个元素的值:插在首元结点之前
3. 大于最后一个元素的值:插在链尾
4. 空链表:插在头结点之后

我的代码如下,思路就按照测试点的顺序:

List Insert( List L, ElementType X )
{
        List p,h;
        h = L;    
        p = (List)malloc(sizeof(struct Node));    
        p->Data = X;    
        p->Next = NULL;     
        if(L->Next==NULL){  //如果L为空表        
        L->Next = p;        
        return L;    
        }    
        if(L->Next->Data >= X){  //如果首元结点的数值大于等于X        
        p->Next = h->Next;        
        L->Next = p;        
        return L;
        }    
         while(h->Next && h->Data < X){        
         if(h->Next->Data >= X){  //如果小于前一个并且大于等于后一个            
         p->Next = h->Next;            
         h->Next = p;            
         break;        
         }        
         h = h->Next;    
         }    
         if(h->Next==NULL) //如果X大于表中所有元素        
         	h->Next = p;
   	 return L;
}

总结:
数据结构的函数题,考察链表的基本操作(插入)。不难,但容易少考虑特殊情况,多分析,多思考。

你可能感兴趣的:(PTA)