将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
求解:
#include <iostream>
using namespace std;
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) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
{
ListNode* l3=new ListNode(1);
ListNode *l4=l3;
while(l1!=NULL && l2!=NULL)
{
if(l1->val>l2->val)
{
//l3->val=l2->val;
l3->next=l2;
l2=l2->next;
}
else
{
l3->next=l1;
l1=l1->next;
}
l3=l3->next;
}
l3->next = l1 == NULL ? l2 : l1;
return l4->next;
}
int main()
{
ListNode n1(1), n2(3), n3(5), n4(7), n5(9);
n1.next = &n2;
n2.next = &n3;
n3.next = &n4;
n4.next = &n5;
ListNode m1(2), m2(4), m3(6), m4(8), m5(10);
m1.next = &m2;
m2.next = &m3;
m3.next = &m4;
m4.next = &m5;
ListNode *pMergedHead = new ListNode(0);
pMergedHead = mergeTwoLists(&n1, &m1);
while (pMergedHead != NULL)
{
cout << pMergedHead ->val << " ";
pMergedHead = pMergedHead ->next;
}
}
例2:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
求解(使用递归):
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==NULL || head->next==NULL)
{
return head;
}
ListNode* p=head->next;
ListNode* tmp=p->next;
p->next=head;
head->next=swapPairs(tmp);
return p;
}
};