两个链
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
合并
已知两个链表head1和head2各自有序,请把它们合成一个链表依然有序。保留所有结点,即便大小相同
链表节点结构
typedef struct Node
{
int data;
struct Node* next;
}Node;
合并函数的接口为:
Node* Merge(Node* head1,Node* head2);
答:
Node* Merge(Node* head1,Node* head2)
{
if(head1 == NULL)
return head2;
if(head2 == NULL)
return head1;
Node* head;
Node* temp1;
Node* temp2;
if(head1->data < head2->data) {//结果链表为升序
head = head1;
temp1 = head1->next; temp2 = head2;
}
else
{
head = head2;
temp1 = head1;
temp2 = head2->next; }
Node* temp3 = head; while(temp1 != NULL && temp2 != NULL)
{
if(temp1->data < temp2->data)
{
temp3->next = temp1; temp3 = temp1;
temp1 = temp1->next; }
else
{
temp3->next = temp2;
temp3 = temp2;
temp2 = temp2->next;
}
}
if(temp1 == NULL)
temp3->next = temp2; if(temp2 == NULL)
temp3->next = temp1; return head;//返回连接后的链表
}
算法思路是:定义一个临时头结点指针,然后分别遍历另外两个链表,串联成一个链表,注意的是:两链表其中一个为空和两个长度不等的情况。