龙空技术网

【程序员每日一练】合并两个有序链表的C代码

一人独吟一山秋 29

前言:

眼前看官们对“mergetwolists函数”可能比较关怀,你们都需要了解一些“mergetwolists函数”的相关内容。那么小编也在网摘上收集了一些关于“mergetwolists函数””的相关知识,希望姐妹们能喜欢,我们快快来了解一下吧!

【程序员每日一练】

题目名称:合并两个有序链表(Merge Two Sorted Lists)

题目描述:

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入: 1->2->4, 1->3->4

输出: 1->1->2->3->4->4

解题思路:

这道题可以使用迭代法来解决。我们可以定义一个虚拟头节点,将两个链表的节点一一对应地插入到这个虚拟头节点的后面,最后返回虚拟头节点的下一个节点即可。

代码实现:

以下是合并两个有序链表的C代码实现:

#include

#include

struct ListNode {

int val;

struct ListNode *next;

};

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {

struct ListNode dummy;

struct ListNode *p = &dummy;

while (l1 && l2) {

if (l1->val < l2->val) {

p->next = l1;

l1 = l1->next;

} else {

p->next = l2;

l2 = l2->next;

}

p = p->next;

}

p->next = l1 ? l1 : l2;

return dummy.next;

}

python语言:

class ListNode:

def __init__(self, val=0, next=None):

self.val = val

self.next = next

class Solution:

def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:

dummy = ListNode(0) # 定义虚拟头节点

p = dummy # 定义指针,指向虚拟头节点

while l1 and l2:

if l1.val < l2.val:

p.next = l1

l1 = l1.next

else:

p.next = l2

l2 = l2.next

p = p.next # 移动指针,指向下一个节点

p.next = l1 or l2 # 将剩余的节点尾插在虚拟头节点的后面

return dummy.next # 返回虚拟头节点的下一个节点

喜欢的话欢迎点个关注,谢谢!

标签: #mergetwolists函数