C++s合并两个链表(牛客剑指offer)

来源:互联网 发布:北京地铁网络取票 编辑:程序博客网 时间:2024/06/01 07:25
/////这段代码不忍直视,想不通这样在牛客剑指offer上都可以通过.。#include <iostream>using namespace std;struct ListNode{int val;struct ListNode *next;ListNode(int x):val(x),next(NULL){}};void show(ListNode *root);class Solution {public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2){                ListNode *root=NULL;        ListNode *p = pHead1;        ListNode *q = pHead2;        ListNode *m = NULL;        ListNode *n = NULL;        if(p==NULL)return q;        if(q==NULL)return p;        while(p!=NULL && q!=NULL)        {                        if(p->val>q->val)            {                n=q->next;                if(root==NULL)                {                root = new ListNode(q->val);                }                else                {                    ListNode *k = root;//m=NULL;                    ListNode *s = new ListNode(q->val);                    while(k!=NULL)                    {                        m=k;                        k=k->next;                    }                    if(m!=NULL)                    {                        m->next=s;//m=s;                    }                }                delete q;                q=n;            }            else            {                n=p->next;                if(root==NULL)                {                    root = new ListNode(p->val);                }                else                {//m=NULL;                    ListNode *k = root;                    ListNode *s = new ListNode(p->val);                    while(k!=NULL)                    {                        m=k;                        k=k->next;                    }                    if(m!=NULL)                    {                        m->next=s;//m=s;                    }                }                delete p;                p=n;            }        }m=root;        if(q==NULL)        {          while(m!=NULL){n=m;m=m->next;}n->next=p;          }        if(p==NULL)        {            while(m!=NULL){n=m;m=m->next;}n->next=q;        }   //show(root);return root;       }};void show(ListNode *root){ListNode *p = root;while(p!=NULL){cout<<p->val<<"  ";p=p->next;}cout<<endl;}int main(){ListNode *p1 = new ListNode(1);ListNode *p2 = new ListNode(3);ListNode *p3 = new ListNode(5);p1->next = p2;p2->next = p3;show(p1);ListNode *p4 = new ListNode(2);ListNode *p5 = new ListNode(4);ListNode *p6 = new ListNode(6);p4->next = p5;p5->next = p6;show(p4);Solution sl;ListNode* n = sl.Merge(p1,p4);show(n);return 0;}

1 0
原创粉丝点击