单链表的合并_bug
// 单链表的合并.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <stdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct Linklist
{
int data;
Linklist* next;
};
//初始化单链表
Linklist* Initlist() {
Linklist* head = new Linklist;
head->next = NULL;
return head;
}
//头插入建立结点
void Insetlist(Linklist* head, int i)
{
Linklist* cur = new Linklist;
cur->data = i;
cur->next = head->next;
head->next = cur;
}
//创建A和B两个链表
void Createlist(Linklist* LA, Linklist* LB)
{
for (int i = 0; i < 10; i++)
{
Insetlist(LA, i);
i++;
Insetlist(LB, i);
}
Insetlist(LB, 10);
Insetlist(LB, 15);
}
void Mergelist(Linklist *LA, Linklist*LB, Linklist*LC)
{
Linklist*pa = LA->next;
Linklist*pb = LB->next;
LC = LA;
Linklist*pc = LC;
while (pa && pb)
{
if (pa->data <= pb->data) {
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
delete LB;
}
void print(Linklist* head)
{
Linklist* temp = head->next; //防止头指针移动
while (temp)
{
cout << temp->data << " ";
temp = temp->next;
}
}
int main() {
Linklist* LA = Initlist();
Linklist* LB = Initlist();
Linklist* LC = NULL;
Createlist(LA, LB);
cout << "链表A为:";
print(LA);
cout << endl << "链表B为:";
print(LB);
Mergelist(LA, LB, LC);
cout << endl << "链表C为:" << endl;
print(LC);
return 0;
}