18,有两个循环单链表,链表头指针分别为h1和h2,编写一个函数将链表h2链接到链表 h1之后,要求链接后的链表仍保持循环链表形式。

    技术2022-07-10  111

    18,有两个循环单链表,链表头指针分别为h1和h2,编写一个函数将链表h2链接到链表h1之后,要求链接后的链表仍保持循环链表形式。

    思路:两个链表都找到最后一个节点,然后再链接

    #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include<map> #include<vector> #include<queue> #include<set> #include<stack> using namespace std; // 链表节点结构 typedef struct Node{ int data; struct Node * next; Node(): next(NULL){}; Node(int data):data(data), next(NULL){}; }Node, *LinkList; // 输出循环单链表 void show(LinkList L){ Node * p = L->next; while(p != L){ cout<<p->data<<" "; p = p->next; } cout<<endl; } void append(LinkList &La, LinkList Lb){ Node *pa = La->next; Node *pb = Lb->next; // 两个链表都找打最后一个节点 while(pa->next != La){ pa = pa->next; } while(pb->next != Lb){ pb = pb->next; } pa->next = Lb->next; pb->next = La; } // 头插创建链表 void createListFromHead(vector<int> v, LinkList &L){ // 创建头 L = new Node(); L->next = L; // 生成链表 for(int i=0; i<v.size(); i++){ Node *p = new Node(v.at(i)); p->next = L->next; L->next = p; } } // 尾插创建链表 void careteListFromEnd(vector<int> v, LinkList &L){ // 创建头 L = new Node(); L->next = L; // 设置尾指针 Node *p = L; // 生成链表 for(int i : v){ Node *q = new Node(i); q->next = p->next; p->next = q; p = q; } } int main(){ int a[] = {1,2,3,4,5,6}; vector<int> va(a, a+6); int b[] = {7,8,9}; vector<int> vb(b, b+3); LinkList La, Lb; careteListFromEnd(va, La); careteListFromEnd(vb, Lb); append(La, Lb); show(La); return 0; }

     

    Processed: 0.015, SQL: 9