合并两个排序的链表
Posted ctz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并两个排序的链表相关的知识,希望对你有一定的参考价值。
题目
输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的。
思路
两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中。
#include <iostream> using namespace std; struct node { int data; struct node *next; }; class Solution { public: Solution(); void create(); void print(); void merge(node *h); node *r_merge(node *h1,node *h2); node *head; }; Solution::Solution() { head=new node(); head->next=nullptr; head->data=0; } void Solution::create() { if(head==nullptr) return; auto t=head; int x; while(1) { cin>>x; if(x) { t->next=new node(); t=t->next; t->data=x; t->next=nullptr; } else { t->next=nullptr; break; } } } void Solution::print() { auto n=head; while(n) { cout<<n->data<<endl; n=n->next; } } void Solution::merge(node *h) { if(!head||!h||!head->next||!h->next) return; node *h1=head->next; node *h2=h->next; node *h3=head; h3->next=nullptr; while(h1&&h2) { if(h1->data<=h2->data) { h3->next=h1; h3=h3->next; h1=h1->next; } else { h3->next=h2; h3=h3->next; h2=h2->next; } } if(h1) h3->next=h1; else h3->next=h2; } node *Solution::r_merge(node *h1,node *h2) { if(!h1) return h2; else if(!h2) return h1; node *h3=nullptr; if(h1->data<=h2->data) { h3=h1; h3->next=r_merge(h1->next,h2); } else { h3=h2; h3->next=r_merge(h1,h2->next); } return h3; } int main() { Solution s,S; s.create(); S.create(); //s.merge(S.head); s.head=s.r_merge(s.head->next,S.head->next); s.print(); return 0; }
以上是关于合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章