合并两个排序的链表

来源:互联网 发布:ubuntu的samba服务器 编辑:程序博客网 时间:2024/06/05 05:23

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
每个链表从左端开始遍历,一边遍历一边创建新链表即可。
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ListNode *t = NULL;ListNode*r = NULL;ListNode*p = pHead1, *q = pHead2;while(p && q){if(p->val <= q->val){if(t == NULL){t = new ListNode(p->val);r = t;}else{r->next = new ListNode(p->val);r = r->next;}p = p->next;}else{if(t == NULL){t = new ListNode(q->val);r = t;}else{r->next = new ListNode(q->val);r = r->next;}q = q->next;}}while(p){if(t == NULL){t = new ListNode(p->val);r = t;}else{r->next = new ListNode(p->val);r = r->next;}p = p->next;}while(q){if(t == NULL){t = new ListNode(q->val);r = t;}else{r->next = new ListNode(q->val);r = r->next;}q = q->next;}return t;}void print(ListNode*p){while(p){printf("%d ", p->val);p = p->next;}putchar(10);}int main(void){ListNode*a = new ListNode(1);ListNode*p = a;p->next = new ListNode(3);p = p->next;p->next = new ListNode(5);p = p->next;p->next = NULL;ListNode*b = new ListNode(2);p = b;p->next = new ListNode(4);p = p->next;p->next = new ListNode(6);p= p->next;p->next = NULL;print(a);print(b);print(Merge(a, b));return 0;}



0 0
原创粉丝点击