【数据结构】单链表—合并两个排序链表 — 递归

前端之家收集整理的这篇文章主要介绍了【数据结构】单链表—合并两个排序链表 — 递归前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍使按照递增排序的。

思路:

代码如下:

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;
};
原文链接:https://www.f2er.com/datastructure/382468.html

猜你在找的数据结构相关文章