已知两个链表head1 和head2 各自有序 请把它们合并成一个链表依然有序
1.非递归
Node* Merge(Node* head1, Node* head2)
{
Node* head = NULL
Node* head_temp = NULL;
if(head1 == NULL) return head2;
if(head2 == NULL) return head1;
Node* p = head1;
Node* q = head2;
if(p->value < q->value)
{
head_temp= p;
p = p->next;
}
else
{
head_temp = q;
q = q->next;
}
head = head_temp;
while(NULL != p && NULL != q)
{
if(p->value < q->value)
{
head_temp->next = p;
head_temp = p;
p = p->next;
}
else
{
head_temp->next = q;
head_temp = q;
q = q->next;
}
}
while(p)
{
head_temp->next = p;
head_temp = p;
p = p->next;
}
while(q)
{
head_temp->next = q;
head_temp = q;
q = q->next;
}
return head;
}
2. 递归
struct Node
{
Node* next;
int value;
};
Node* Merge(Node* head1, Node* head2)
{
Node* res;
if(head1 == NULL) return head2;
if(head2 == NULL) return head1;
if(head1->value < head2->value)
{
res = head1;
res->next = Merge(head1->next, head2);
}
else
{
res = head2;
res->next = Merge(head1, head2->next);
}
return res;
}
单链表的逆置
LNode* ReverseList(LNode* head)
{
if (head == NULL)
return NULL;
LNode* pre = head;
LNode* cur = head->next;
LNode* nxt = cur;
while (nxt!=NULL)
{
nxt = cur->next;
cur->next = pre;
pre = cur;
cur =nxt;
}
return pre;
}