7

来源:互联网 发布:sql中的update语句 编辑:程序博客网 时间:2024/04/30 16:17

问题

            假设有两个按元素值递增次序排列的线性表,均以单链表形式存储,请编写算法将这两个单链表归并为一个按元素值递减次序排列的单列表,并要求利用原来两个单链表的结点存放归并后的单链表。

分析

             两个链表均是按元素值递增次序排列,从头开始遍历链表l1和l2,假设合并后的链表存到l1中,则首先将l1置为空表,此时,如果l1对应结点的值小于l2对应结点的值,则将l1对应的结点插入到新的l1中,否则,将l2对应的结点插入到l1中。

代码

typedef int ElemType;typedef struct LNode {    ElemType data;    struct LNode * next;}LNode, *LinkList;void mergeList(LinkList &l1, LinkList &l2){    LNode *p = l1 -> next, *q = l2 -> next;///p和q分别指向l1和l2头结点下一个结点    l1 -> next = NULL;///将l1置空,保存新的链表    LNode *r = l1;///使用尾插法建立新的链表    while(p && q) {///p和q两个工作指针遍历链表        if(p -> data < q -> data) {///l1对应的结点的值小于l2对应的结点的值            LNode *p1 = p -> next;            p -> next = NULL;            r -> next = p;            r = r -> next;            p = p1;        }else {///l1对应的结点的值大于l2对应的结点的值            LNode *q1 = q -> next;            q -> next = NULL;            r -> next = q;            r = r -> next;            q = q1;        }    }    ///p和q有一个到了链尾,如果是q到了链尾,那么q指向p,如果p到了链尾,那刚好    if(p) {        q = p;    }    r -> next = q;}


源代码

      http://123.206.59.223:8080/code/code/7.rar
0 0
原创粉丝点击