链表直接插入排序法

#include 
#include 

//链表结构
typedef struct Lnode
{
    int data;
    struct Lnode* next;
}Lnode;
//打印链表
void printList(Lnode* head)
{
    Lnode* p=head->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }

}
//直接插入排序法
void Sort_LinkedList(Lnode* head)
{
   Lnode* p=head->next->next;//永远指向无序区间的第一个
   head->next->next=NULL; //将有序区间的最后一个指针赋空
   while(p!=NULL)
   {
      //将节点信息拷贝一份
      Lnode* temp=(Lnode*)malloc(sizeof(Lnode));
      temp->data=p->data;
      temp->next=NULL;

     /*将temp插入到有序区间中*/
     Lnode* q1=head;
     Lnode* q2=head->next;
     while(q2!=NULL)
     {

        if(q2->data<=temp->data)
        {
           q1=q1->next;
           q2=q2->next;
        }
        else
        {
          temp->next=q1->next;
          q1->next=temp;
          break;
        }
     }
     if(q2==NULL)
     {
        q1->next=temp;
     }
     p=p->next;
   }

}`在这里插入代码片`
int main()
{
    //初始化构造一个无序链表
    int n;
    scanf("%d",&n);
    Lnode* list=(Lnode*)malloc(sizeof(Lnode));
    Lnode* head;
    Lnode* rear;
    head=list;
    rear=list;
    while(n--)
    {
        int num;
        scanf("%d",&num);
        Lnode* node=(Lnode*)malloc(sizeof(Lnode));
        node->data=num;
        node->next=NULL;
        rear->next=node;
        rear=node;
    }
    Sort_LinkedList(list);
    printList(list);
    return 0;
}

你可能感兴趣的:(考研数据结构编程题)