leetcode 206. 反转链表
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
leetcode21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
#include<iostream>
using namespace std;
typedef struct Node
{
int data;
Node *next;
}node;
// 1. 已知链表的头节点head,写一个函数把这个链表逆序;
node* ReverseList(node *head)
{
if (head == NULL || head->next==NULL)
{
return head;
}
node *prev = NULL;
node *next;
while (head!=NULL)
{
next = head->next;
head->next = prev;
prev = head;
head = next;
}
return head;
}
// 2.已知两个链表有序,请把他们合并成一个依然有序的链表。
node* Merge(node *head1, node *head2)
{
if (head1 == NULL)
return head2;
if (head2 == NULL)
return head1;
node *head = NULL;
node *p1 = NULL;
node *p2 = NULL;
if (head1->data < head2->data)
{
head = head1;
p1 = head1->next;
p2 = head2;
}
else
{
head = head2;
p2 = head2->next;
p1 = head1;
}
node *pcurrent = head;
while (p1!=NULL && p2!=NULL)
{
if (p1->data <= p2->data)
{
pcurrent->next = p1;
pcurrent = p1;
p1 = p1->next;
}
else
{
pcurrent->next = p2;
pcurrent = p2;
p2 = p2->next;
}
}
if (p1!=NULL)
{
pcurrent->next = p1;
}
if (p2!=NULL)
{
pcurrent->next = p2;
}
return head;
}