题目要求:
注意题目中的一句话,要求我们使用原来序列中的结点!那么我们就不能使用新的内存单元,来单独存储合并后的链表。
【如果申请新内存,pta会报段错误】
使用原来的结点:优点,节省内存;缺点,破坏了原来的链表,不能原样输出原链表##
使用新内存单元:优点,保存原链表状态;缺点,浪费内存##
使用原来结点的代码:
List Merge(List L1, List L2)
{
List l1, l2, p, head;
l1 = L1->Next;
l2 = L2->Next;
head = (List)malloc(sizeof(struct Node));
head->Next = NULL;
p = head;
while(l1 && l2)
{
if(l1->Data <= l2->Data)
{
p->Next = l1;
p = l1;
l1 = l1->Next;
}
else
{
p->Next = l2;
p = l2;
l2 = l2->Next;
}
}
if(l1 != NULL)
{
p->Next = l1;
}
else{
p->Next = l2;
}
L1->Next = NULL;
L2->Next = NULL;
return head;
}
不使用原来结点的代码:
List Merge(List L1, List L2)
{
List l1, l2, head, p, t;
l1 = L1->next;
l2 = L2->next;
head = (List)malloc(sizeof(struct LNode));
head->next = NULL;
p = head;
while(l1 && l2)
{
t = (List)malloc(sizeof(struct LNode));
if(l1->Data < l2->Data)
{
t->Data = l1->Data;
p->next = t;
p = t;
l1 = l1->next;
}
else
{
t->Data = l2->Data;
p->next = t;
p = t;
l2 = l2->next;
}
}
if(l1 != NULL)
p->next = l1;
else
p->next = l2;
return head;
}