将两个非递减的有序链表合成为一个非递增的有序链表 c语言
时间: 2023-10-18 15:04:07 浏览: 105
可以按照以下步骤来实现:
1. 定义两个指针,分别指向两个链表的头节点,以及一个指针,指向合并后链表的头节点。
2. 比较两个链表当前节点的值,将较小的节点加入到合并后的链表中,并将指针指向下一个节点。
3. 循环执行步骤2,直到有一个链表遍历完毕。
4. 将剩余的链表连接到合并后的链表的末尾。
5. 返回合并后的链表的头节点。
以下是示例代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int val;
struct Node *next;
} Node;
Node *mergeLists(Node *list1, Node *list2) {
Node *mergedList = NULL;
Node *currentNode = NULL;
while (list1 != NULL && list2 != NULL) {
Node *minNode;
if (list1->val <= list2->val) {
minNode = list1;
list1 = list1->next;
} else {
minNode = list2;
list2 = list2->next;
}
if (mergedList == NULL) {
mergedList = currentNode = minNode;
} else {
currentNode->next = minNode;
currentNode = minNode;
}
}
if (list1 != NULL) {
if (mergedList == NULL) {
mergedList = list1;
} else {
currentNode->next = list1;
}
}
if (list2 != NULL) {
if (mergedList == NULL) {
mergedList = list2;
} else {
currentNode->next = list2;
}
}
// 反转链表
Node *prev = NULL;
Node *curr = mergedList;
Node *nextNode;
while (curr != NULL) {
nextNode = curr->next;
curr->next = prev;
prev = curr;
curr = nextNode;
}
mergedList = prev;
return mergedList;
}
int main() {
Node *list1 = (Node *) malloc(sizeof(Node));
Node *list2 = (Node *) malloc(sizeof(Node));
list1->val = 1;
Node *node2 = (Node *) malloc(sizeof(Node));
node2->val = 3;
Node *node3 = (Node *) malloc(sizeof(Node));
node3->val = 5;
list1->next = node2;
node2->next = node3;
node3->next = NULL;
list2->val = 2;
Node *node5 = (Node *) malloc(sizeof(Node));
node5->val = 4;
Node *node6 = (Node *) malloc(sizeof(Node));
node6->val = 6;
list2->next = node5;
node5->next = node6;
node6->next = NULL;
Node *mergedList = mergeLists(list1, list2);
Node *currentNode = mergedList;
while (currentNode != NULL) {
printf("%d ", currentNode->val);
currentNode = currentNode->next;
}
printf("\n");
return 0;
}
```
注:该代码实现中,为了将合并后的链表变成非递增的有序链表,使用了链表反转的方法,将链表从头到尾遍历一遍,将节点的next指针指向前一个节点,最后将链表的头节点指向最后一个节点。
阅读全文
相关推荐
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)