本关任务:编写C++程序把两个有序排列的单向整数链表合并成一个有序排列的的整数链表。具体实现如下:从小到大依次输入两列整数以-1表示结尾然后根据这两列整数构造两个单向链表按整数大大小关系把这两个链表合并成一个有序单向链表最后从头到尾遍历输出这个链表的数据域用一个空格隔开。
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
// 在链表的末尾插入一个节点
void insertNode(Node*& head, int value) {
Node* newNode = new Node;
newNode->data = value;
newNode->next = nullptr;
if (head == nullptr) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 合并两个有序链表
Node* mergeLists(Node* l1, Node* l2) {
Node dummy;
Node* tail = &dummy;
while (l1 != nullptr && l2 != nullptr) {
if (l1->data < l2->data) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
if (l1 != nullptr) {
tail->next = l1;
}
if (l2 != nullptr) {
tail->next = l2;
}
return dummy.next;
}
// 打印链表数据域
void printList(Node* head) {
Node* temp = head;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
}
// 释放链表内存
void freeList(Node* head) {
Node* temp = head;
while (temp != nullptr) {
Node* nextNode = temp->next;
delete temp;
temp = nextNode;
}
}
int main() {
Node* list1 = nullptr;
Node* list2 = nullptr;
int num;
cout << "请输入第一列整数,以-1表示结尾:" << endl;
while (cin >> num) {
if (num == -1) {
break;
}
insertNode(list1, num);
}
cout << "请输入第二列整数,以-1表示结尾:" << endl;
while (cin >> num) {
if (num == -1) {
break;
}
insertNode(list2, num);
}
Node* mergedList = mergeLists(list1, list2);
cout << "合并后的有序链表为:" << endl;
printList(mergedList);
freeList(mergedList);
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/hArq 著作权归作者所有。请勿转载和采集!