C语言输入无序的元素,分别建立两个有3个结点的逆序单链表(有头结点)(显示排序后的链表),合并两个单链表使之仍然有序,显示合并后的单链表。 样例输入 4 6 8 5 7 9样例输出 8 6 4 9 7
时间: 2024-12-10 20:33:08 浏览: 71
在C语言中,你可以通过以下几个步骤来完成这个任务:
1. **创建逆序链表**:
- 首先,你需要为逆序链表定义结构体,包括一个数据域和指向下一个节点的指针。
- 输入无序元素时,逐个读取并插入到链表中,每次插入都作为新链表的头部。
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
void insertInReverse(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
```
2. **合并两个逆序链表**:
- 创建一个新的头节点,并设置它为空。
- 比较两个链表当前节点的数据,将较小的那个节点添加到新链表,并更新当前节点指针。
- 当其中一个链表遍历完,直接连接另一个链表剩余部分。
```c
Node* mergeLists(Node* list1, Node* list2) {
Node* mergedHead = NULL;
Node* current1 = list1;
Node* current2 = list2;
while (current1 && current2) {
if (current1->data > current2->data) {
if (!mergedHead) {
mergedHead = current2;
} else {
mergedHead->next = current2;
}
current2 = current2->next;
} else {
if (!mergedHead) {
mergedHead = current1;
} else {
mergedHead->next = current1;
}
current1 = current1->next;
}
}
if (current1) {
mergedHead->next = current1;
} else {
mergedHead->next = current2;
}
return mergedHead;
}
```
3. **显示排序后的链表**:
- 使用一个循环遍历合并后的链表,并打印每个节点的数据。
```c
void displayList(Node* head) {
Node* temp = head;
while (temp) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
```
使用上述函数,你可以处理给定的样例输入:
```c
int main() {
Node* list1_head = NULL, *list2_head = NULL;
// 分别处理两个输入串,构造两个逆序链表
insertInReverse(&list1_head, 4);
insertInReverse(&list1_head, 6);
insertInReverse(&list1_head, 8);
insertInReverse(&list2_head, 5);
insertInReverse(&list2_head, 7);
insertInReverse(&list2_head, 9);
Node* sortedList = mergeLists(list1_head, list2_head);
displayList(sortedList);
return 0;
}
```
样例输出将会是 `8 6 4` 和 `9 7`。
阅读全文
相关推荐

















