题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍使按照递增排序的。
思路:
代码如下:
template<class T@H_404_10@>
struct ListNode
{
T@H_404_10@ _value;
ListNode<T@H_404_10@>* _next@H_404_10@;
ListNode(const T@H_404_10@& value)
:_value(value),_next@H_404_10@(NULL@H_404_10@)
{}
};
template<class T@H_404_10@>
class List
{
public:
List()
:_head(NULL@H_404_10@)
{}
bool PushBack();
ListNode<T@H_404_10@>* Merger(ListNode<T@H_404_10@>* head)
{
return@H_404_10@ _Merger(_head,head);
}
ListNode<T@H_404_10@>* _Merger(ListNode<T@H_404_10@>* head1,ListNode<T@H_404_10@>* head2)//合并两个有序链表,返回新链表的指针
{
if@H_404_10@(head1 == NULL@H_404_10@)
return@H_404_10@ head2;
if@H_404_10@(head2 ==NULL@H_404_10@)
return@H_404_10@ head1;
ListNode<T@H_404_10@>* NewHead = NULL@H_404_10@;
if@H_404_10@(head1->_value < head2->_value)//_head为新链表头节点
{
NewHead = head1;
NewHead->_next@H_404_10@ = _Merger(head1->_next@H_404_10@,head2);
}
else@H_404_10@
{
NewHead = head2;
NewHead->_next@H_404_10@ = _Merger(head1,head2->_next@H_404_10@ );
}
return@H_404_10@ NewHead;//一定要给上一层返回!
}
private:
ListNode<T@H_404_10@>* _head;
};