將兩個遞增的有序鏈表合併爲一個遞增的有序鏈表。

將兩個遞增的有序鏈表合併爲一個遞增的有序鏈表。要求結果鏈表仍使用原來兩個鏈表

#include "stdio.h"
#include<stdlib.h>
typedef struct node{
int data;
struct node* next;
}listnode;
typedef listnode* linklist;/* ´øÍ·µ¥Á´±íµÄÍ·Îļþ */
linklist init_linklist()
{/* ³õʼ»¯´øÍ·µ¥Á´±í */
linklist head;
head=(linklist)malloc(sizeof(listnode));
head->next=NULL;
return head;
}
linklist create_linklist_tail()/* Êý×Ö 0 Ϊ½áÊø·û */
{/* β²å·¨½¨Á¢´øÍ·Á´±í */
linklist head,r,s;int x;
head=init_linklist();
r=head;
scanf("%d",&x);
while(x)
{
s=(linklist)malloc(sizeof(listnode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return head;
}
void output_linklist(linklist head)
{/* Êä³ö´øÍ·µ¥Á´±íÖеĸ÷½áµãÖµ */
linklist p;
p=head->next;
if(!p)
printf("NO data!");
else
while(p)
{
printf("%3d",p->data);
p=p->next;
}
}
void merge(linklist head, linklist head2)
{
linklist p1, q1;
linklist p2, q2;
p1 = head->next;
q1 = p1->next;
p2 = head2->next;
q2 = p2->next;
while(p2){
while(q1 && !(p2->data >= p1->data && p2->data <= q1->data))
{
p1 = q1;
q1 = q1->next;
}
if(!(p2->data == p1->data || p2->data == q1->data))
{
p2->next = p1->next;
p1->next = p2;
p1 = p2;
q1 = p1->next;
}
p2 = q2;
q2 = q2->next;
}
}
void main(void)
{
linklist head,head2;
head=create_linklist_tail();
head2=create_linklist_tail();
merge(head, head2);
output_linklist(head);
getchar();
}
/* ÊÇ´øÍ·Á´½ÓµÄ×ö·¨£¬ÎÒÒѾ­ÔËÐйýÊÇ¿ÉÒÔÓõģ¬¾ßÌå×Ô¼º·ÖÎö merge º¯Êý£¬ÓÐÎÊÌâÇëÖ¸³ö */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章