码迷,mamicode.com
首页 > 其他好文 > 详细

21.Merge Two Sorted Lists(法1头部附加节点法2二级指针)

时间:2015-02-10 09:19:48      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

Merge two sorted linked lists and return it as a new list. The new listshould be made by splicing together the nodes of the first two lists.

HideTags

 Linked List



#pragma once
#include<iostream>
using namespace std;

struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};

//法1:头部添加冗余指针,正常merge
ListNode *mergeTwoLists1(ListNode *l1, ListNode *l2) 
{
	ListNode* result = new ListNode(-1);//头部附加节点,应返回result->next
	ListNode* p = result;
	while (l1&&l2)
	{
		if (l1->val < l2->val)
		{
			p->next = new ListNode(l1->val);//注意不能写成是p=new。。。。
			l1 = l1->next;
		}
		else
		{
			p->next = new ListNode(l2->val);
			l2 = l2->next;
		}
		p = p->next;
	}
	while (l1)
	{
		p->next= new ListNode(l1->val);
		l1 = l1->next;
		p = p->next;
	}
	while (l2)
	{
		p->next = new ListNode(l2->val);
		l2 = l2->next;
		p = p->next;
	}
	return result->next;
}

//法2:二级指针
ListNode *mergeTwoLists2(ListNode *l1, ListNode *l2)
{
	ListNode *result;
	ListNode **pp = &result;
	while (l1&&l2)
	{
		if (l1->val < l2->val)
		{
			*pp = new ListNode(l1->val);
			l1 = l1->next;
		}
		else
		{
			*pp = new ListNode(l2->val);
			l2 = l2->next;
		}
		pp = &(*pp)->next;
	}
	while (l1)
	{
		*pp = new ListNode(l1->val);
		l1 = l1->next;
		pp = &(*pp)->next;
	}
	while (l2)
	{
		*pp = new ListNode(l2->val);
		l2 = l2->next;
		pp = &(*pp)->next;
	}
	return result;
}
void main()
{
	ListNode* l1 = new ListNode(1);
	ListNode* l2 = new ListNode(2);
	ListNode* l3 = new ListNode(1);
	ListNode* l4 = new ListNode(1);

	ListNode* result = mergeTwoLists2(l2, l1);
	while (result)
	{
		cout << result->val << ' ';
		result = result->next;
	}
	cout << endl;
	system("pause");
}


21.Merge Two Sorted Lists(法1头部附加节点法2二级指针)

标签:

原文地址:http://blog.csdn.net/hgqqtql/article/details/43691695

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!