两个有序链表合并(新表不含重复元素C语言版
时间: 2023-09-10 21:07:16 浏览: 123
)。
好的,这是一个算法问题,我可以为您提供解答。两个有序链表合并的具体操作是,分别从两个链表的头结点开始比较,将较小的节点插入新链表,并将指针指向下一个节点,直到其中一个链表为空,再将另一个链表的剩余节点插入新链表中。具体实现细节可以参考以下代码:
```
#include<stdio.h>
#include<stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head, *tail;
head = tail = NULL;
while(l1 && l2) {
if(l1->val <= l2->val) {
if(!head) head = tail = l1;
else {
tail->next = l1;
tail = l1;
}
l1 = l1->next;
} else {
if(!head) head = tail = l2;
else {
tail->next = l2;
tail = l2;
}
l2 = l2->next;
}
}
if(l1) {
if(!head) head = l1;
else tail->next = l1;
}
if(l2) {
if(!head) head = l2;
else tail->next = l2;
}
return head;
}
int main() {
struct ListNode *l1, *l2, *res;
l1 = (struct ListNode *)malloc(sizeof(struct ListNode));
l2 = (struct ListNode *)malloc(sizeof(struct ListNode));
l1->val = 1; l1->next = NULL;
l2->val = 2; l2->next = NULL;
res = mergeTwoLists(l1, l2);
printf("%d",res->val);
return 0;
}
```
此处以两个链表[1]和[2]合并为例,代码输出结果为"1"。
阅读全文