下面的代碼不工作... 我試圖合併2使用迭代函數的鏈表.. 但它沒有給予所需的輸出..它是打印元素無限 我正在學習編程.. 幫我... 在此先感謝...合併2排序鏈表未得到期望的輸出
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}list_node;
list_node* MergeLists(list_node *headA, list_node* headB)
{
if (headA == NULL && headB == NULL) {
return NULL;
}
if (headA == NULL) {
return headB;
}
if (headB == NULL) {
return headA;
}
if (headA->data > headB->data) {
list_node *tmp = headB;
headB = headA;
headA = tmp;
}
list_node *listHead = headA;
while (headB) {
while (headA->next != NULL &&
headB->data > headA->next->data) {
headA = headA->next;
}
list_node* nextB = headB->next;
headB->next = headA->next;
headA->next = headB;
headB = nextB;
}
return listHead;
}
list_node* push(list_node* head_r, int new_data)
{
list_node* new_Node = (list_node*)malloc(sizeof(list_node));
new_Node->data = new_data;
new_Node->next = head_r;
head_r = new_Node;
return head_r;
}
void Print(list_node* head_r)
{
while(head_r)
{
printf("%d\n", head_r->data);
head_r = head_r->next;
}
}
int main()
{
list_node* l_list = NULL;
list_node* l_list2 = NULL;
l_list = push(push(push(push(push(l_list, 1),2),3),4),5);
l_list2 = push(push(push(push(push(l_list, 6),8),3),4),0);
MergeLists(l_list, l_list2);
printf("Merge 2 Sorted list \n");
Print(l_list);
return 0;
}
注:大部分的共同的德(約80%)是爲了處理*特殊情況*。通過使用指向節點的指針,可以避免* all *特殊情況,將合併函數減少到大約五行代碼 – wildplasser
,請使用for循環進行l_list賦值! – trans1st0r
請標記答案是否正確;) – Mateusz