数据结构之将两个递增的有序链表合并为一个递增的有序链表

来源:互联网 发布:mysql中decode函数 编辑:程序博客网 时间:2024/06/04 18:31

数据结构之将两个递增的有序链表合并为一个递增的有序链表

标签(空格分隔): 学习笔记 数据结构


题目

将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。

合并链表

void MergerLinkList(LinkList La,LinkList Lb,LinkList Lc){    LinkList p = La->next,q = Lb->next,r = Lc;    while(p &&q)//p和q都不为空时    {        if(p->data < q->data)        {            r->next = p;            r = p;            p = p->next;        }        else if(p->data > q->data)        {            r->next = q;            r = q;            q = q->next;        }        else if(p->data == q->data)        {                r->next = p;                q = q->next;                                }    }    if(p)              //如果q遍历完了        r->next = p;   //把p剩下的接到尾部    else               //p遍历完了        r->next = q;   //把q剩下的接到尾部}

原来的思路是在循环里判断链表是否遍历结束,结果写了好多用于判断的if语句,用了好长时间,代码冗长,后来网上搜索了别人的代码,是把遍历完成作为跳出循环的条件,然后判断是哪个链表循环完了,就把另一个链表剩下的结点接到尾部.因为这两个链表是递增的,剩下的就不用排序了.

    else if(p->data == q->data)        {                r->next = p;                q = q->next;                                }/*这里不需要加r = p;这个工作将会在不相等的时候做,即不等时r值变(移动)也不需要加p = p->next;p->data还要比较*/

原来判断是否遍历完成犯了一个低级错误,以后记住NULL(常量)一定要写左边

0 0