leetcode第21题-Merge Two Sorted Lists

本题目是意思是把两个有序的链表合成一个有序的链表,考察了归并算法和链表的操作。

代码也相对比较简单,简单说一下归并函数里三个指针的作用,sum是返回的第一个指针,cur是所要返回的链表里走到的位置,put是对于取到的l1或l2里的某一个指针节点。全部的可运行代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct ListNode{
	int value;
	ListNode *next;
};

ListNode *mergeTwoList(ListNode *l1,ListNode *l2)
{
	ListNode *sum;
	ListNode *cur;
	ListNode *put;
	sum=NULL;//will be returned
	if((l1==NULL)||(l2==NULL))
		return l1?l1:l2;
	while(l1&&l2)
	{
		if(l1->value<l2->value)
		{
			put=l1;
			l1=l1->next;
		}
		else
		{
			put=l2;
			l2=l2->next;
		}
		if(sum==NULL)
		{
			sum=put;
			cur=sum;
		}
		else
		{
			cur->next=put;
			cur=cur->next;
		}
	}
	if(l1)
		cur->next=l1;
	if(l2)
		cur->next=l2;
	return sum;
}

int main()
{
	int n,m;
	printf("Please input the first list number:");
	while(scanf("%d",&m)!=EOF)
	{
		ListNode *h1=(ListNode*)malloc(sizeof(ListNode));
		ListNode *p1=h1;
		p1->next=NULL;
		printf("Please input the first list:\n");
		int tmp,i;
		scanf("%d",&tmp);
		p1->value=tmp;
		for(i=0;i<m-1;i++)
		{
			scanf("%d",&tmp);
			ListNode *q1=(ListNode*)malloc(sizeof(ListNode));
			q1->value=tmp;
			p1->next=q1;
			p1=q1;
			p1->next=NULL;
		}	
		printf("Please input the second list number:");
		scanf("%d",&n);
		printf("Please input the second list:\n");
		ListNode *h2=(ListNode*)malloc(sizeof(ListNode));
		ListNode *p2=h2;
		p2->next=NULL;
		scanf("%d",&tmp);
		p2->value=tmp;
		for(i=0;i<n-1;i++)
		{
			scanf("%d",&tmp);
			ListNode *q2=(ListNode*)malloc(sizeof(ListNode));
			q2->value=tmp;
			p2->next=q2;
			p2=q2;
			p2->next=NULL;
		}
		printf("After Merge:");
		ListNode *list=mergeTwoList(h1,h2);
		ListNode *p=list;
		while(p)
		{
			printf("%d ",p->value);
			p=p->next;
		}
		free(h1);
		free(h2);
		printf("\n");
		printf("Please input the first list number:");
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值