https://leetcode-cn.com/problems/merge-two-sorted-lists/
题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
- 输入:1->2->4, 1->3->4
- 输出:1->1->2->3->4->4
思路
比较两个指针的大小,小的插入新链表。循环下去。
注意结尾指针的处理即可。
答案
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
/***************** 开始 ******************/
ListNode pre(-1); //临时pre节点
ListNode* temp_head = ⪯
while (l1 && l2) //当l1或l2不为空时
{
if (l1->val > l2->val)
{
temp_head->next = l2;
l2 = l2->next;
}
else
{
temp_head->next = l1;
l1 = l1->next;
}
temp_head = temp_head->next;
}
if (l1) //处理链表尾部
{
temp_head->next = l1;
l1 = l1->next;
temp_head = temp_head->next;
}
else if(l2)
{
temp_head->next = l2;
l2 = l2->next;
temp_head = temp_head->next;
}
return pre.next;
/***************** 结束 ******************/
}
};
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode new_head(-1);
ListNode* ret = &new_head;
while( l1 && l2 ) {
if(l1->val<=l2->val){
ret->next=l1;
l1=l1->next;
ret=ret->next;
}
else {
ret->next=l2;
l2=l2->next;
ret=ret->next;
}
}
while(l1) { //处理剩下的
ret->next=l1;
l1=l1->next;
ret=ret->next;
}
while(l2) { //处理剩下的
ret->next=l2;
l2=l2->next;
ret=ret->next;
}
return (new_head.next);
}
};
#include <iostream>
#include <map>
#include <vector>
using namespace std;
//Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
void showList(ListNode* head) //遍历
{
while (head)
{
cout << head->val << "\t";
head = head->next;
}
cout << endl;
}
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
/***************** 开始 ******************/
ListNode pre(-1); //临时pre节点
ListNode* temp_head = ⪯
while (l1 && l2) //当l1或l2不为空时
{
if (l1->val > l2->val)
{
temp_head->next = l2;
l2 = l2->next;
}
else
{
temp_head->next = l1;
l1 = l1->next;
}
temp_head = temp_head->next;
}
if (l1) //处理链表尾部
{
temp_head->next = l1;
l1 = l1->next;
temp_head = temp_head->next;
}
else if(l2)
{
temp_head->next = l2;
l2 = l2->next;
temp_head = temp_head->next;
}
return pre.next;
/***************** 结束 ******************/
}
};
void test01()
{
ListNode a1(1);
ListNode b1(2);
ListNode c1(4);
a1.next = &b1;
b1.next = &c1;
c1.next = NULL;
ListNode a2(1);
ListNode b2(3);
ListNode c2(4);
a2.next = &b2;
b2.next = &c2;
c2.next = NULL;
cout << "Before:" << endl;
showList(&a1);
showList(&a2);
cout << "After: " << endl;
Solution s;
ListNode* result = s.mergeTwoLists(&a1,&a2);
showList(result);
}
int main()
{
test01();
system("pause");
return 0;
}