链表合并

来源:互联网 发布:轻松赚钱的软件 编辑:程序博客网 时间:2024/06/02 06:15
#include <cstdio>#include <vector>struct Node{    Node *next;    int val;};Node* merge(Node* a, Node* b){    Node *h = a, *p, *q;    while (b)    {        for (p = h; p && p->val < b->val; q = p, p = p->next);        if (p == h)        {            q = b->next; b->next = p; h = b; b = q; continue;        }        else        {            a = q;        }        q = b;        b = b->next;        q->next = p; a->next = q;    }    return h;}Node* creatList(int start, int end, int step){    Node* a = new Node(), *p;    a->next = NULL; a->val = start;    p = a;    for (int i = start + step; i <= end; i += step)    {        Node *q = new Node();        q->next = NULL; q->val = i;        p->next = q;        p = p->next;    }    p->next = NULL;    return a;}void print(Node *a){    std::vector<int> v;    while (a)    {        v.push_back(a->val);        a = a->next;    }    for (size_t i = 0; i < v.size(); i++)    {        printf("%d", v[i]);        if (i != v.size() - 1) printf("->");    }    printf("\n");}int main(){    Node* a  = creatList(2, 10, 2);    Node *b = creatList(1, 9, 2);    print(a);    print(b);    Node* c = merge(a, b);    print(c);    return 0;}

原创粉丝点击