C/C++单链表排序

刚开始学数据结构,这道是作业题,写完交作业之余发了出来,需要的朋友可以看看。

题目:

已知:线性表 A、B,分别由单链表 La , Lb 存储,其中数据元素按值非递减有序排列。

具体如下:现需要将 A ,B 归并为一个新的线性表C , C 的数据元素仍按值非递减排列,设线性表 C 由单链表 Lc 存储。

#include <string>
#include <stdlib.h>

typedef int ElemType;
typedef struct list{
    ElemType data;
    struct list *next;
} list,*pointer;
//尾插法新建链表;
void ElmInsert(pointer &l){
    l=(pointer) malloc(sizeof (list));
    pointer node,TranPointer=l;
    ElemType x;
    scanf("%d",&x);
    l->next=NULL;
    while (x!=10){
        node=(pointer) malloc(sizeof (list));
        node->data=x;
        TranPointer->next=node;
        TranPointer=node;
        scanf("%d",&x);
    }
    node->next=NULL;
}
//读取链表
void PrintList(pointer l){
    l=l->next;
    while (l!=NULL){
        printf("%3d",l->data);
        l=l->next;
    }
}
//对链表进行合并
void MergeList(pointer L1,pointer L2){
    pointer SignNode;
    while (L1->next!=NULL){
        SignNode=L1->next;
        L1=L1->next;
    }

    SignNode->next=L2->next;
}
//对链表进行排序
void SortList(pointer L1){
    if (L1->next==NULL){
        return;
    }
    pointer L2;
    pointer p;
    p=L1->next;
    int index=0;
    while (p!=NULL){
        index++;
        p=p->next;
    }
    int i=0,j,t;
    while (i<index){
        L1=L1->next;
        L2=L1->next;
        i++;
        j=i;
        while (j<index){
            if (L1->data>=L2->data) {
                t = L1->data;
                L1->data = L2->data;
                L2->data = t;
            }
            L2=L2->next;
            j++;
        }
    }
}

int main() {
    pointer Lb,La;
    ElmInsert(La);
    ElmInsert(Lb);
    MergeList(La,Lb);
    SortList(La);
    PrintList(La);
    return 0;
}

排序部分,通过双循环在链表内部进行位置交换实现的,可能有点复杂,可以带几个值进去试试。 

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值