剑指offer 面试题17 合并两个排序的链表

E:\arithmetic\LinkTogether


#include <stdio.h>

typedef struct SLinkNode{
	int value;
	struct SLinkNode *next;
}LinkNode;

void addToLink(LinkNode **head, int i);
void printfLink(LinkNode *head);
LinkNode* linkTogether(LinkNode *link1, LinkNode *link2); 

int main(int argc, char *argv[])
{//测试用例 节点数0,1,2,3 >3 
	int i;
	LinkNode *h1 = NULL;
	for(i=0 ; i<4 ; i++){
		addToLink(&h1, (2*i+1) );//!!不能是2i+1.。。弱智错误。。 
	}
	printfLink(h1);
	LinkNode *h2 = NULL;
	for(i=0 ; i<4 ; i++){
		addToLink(&h2, 2*i);
	}
	printfLink(h2);
	
	LinkNode *result = linkTogether(h1, h2);
	if(result != NULL){
		
		printfLink(result);
	}

	
	return 0;
}

LinkNode* linkTogether(LinkNode *link1, LinkNode *link2){
		LinkNode *head, *temp;
		head = NULL;
		temp = NULL;
		if(link1 == NULL){
			return link2;
		}
		if(link2 == NULL){
			return link1;
		}
		if(link1->value <= link2->value){
			temp = link1;
			head = link1;
			link1 = link1->next;
		}
		else {
			temp = link2;
			head = link2;
			link2 = link2->next;	
		}
		while((link1 != NULL) && (link2 != NULL)){
			if(link1->value <= link2->value ){
				temp->next = link1;
				link1 = link1->next;
				temp = temp->next;
			}else {
				temp->next = link2;
				link2 = link2->next;
				temp = temp->next;
			}
		}
		if(link1 == NULL){
			temp->next = link2;
		}
		else{
			temp->next= link1;
		}
		return head;
}

void addToLink(LinkNode **head, int i){
	LinkNode *t = (LinkNode*)malloc(sizeof(LinkNode));
	t->value = i;
	t->next = NULL;
	if(t == NULL)
		return;
	if(*head == NULL)
		*head = t;
	else{
		LinkNode *t2 = *head;
		while(t2->next != NULL)
			t2 = t2->next;
		t2->next = t;
	}
}

void printfLink(LinkNode *head){
	while(head != NULL){
		printf("%d\t", head->value);
		head = head->next;
	}
	printf("\n");	
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值