Advertisement

数据结构 - 链表合并操作

阅读量:

今日有同学在群内询问如何将两个有序链表进行合并,本人尝试编写了相关代码。

递归方法较为直观,且不易出现错误;而采用非递归方式实现时,代码的可读性会有所下降,并且更容易产生逻辑错误。此处提供核心代码片段。

需要特别指出的是,若处理的是双向链表,则实现过程会更加复杂,需同时对每个节点的两个指针进行维护。为避免操作失误,强烈建议在双向链表中增加头尾的哨兵节点。

链表节点的定义如下:

复制代码
 template <typename Comparable>

    
 struct Node {
    
 	Comparable element;
    
 	Node * next;
    
 	Node(const Comparable &e, Node *n = nullptr)
    
 		: element{ e }, next{ n }
    
 	{}
    
 };
    
    
    
    

运用递归机制实现数据的整合

复制代码
 template <typename Comparable>

    
 Node<Comparable> *
    
 merge(Node<Comparable> * n1, Node<Comparable> * n2);
    
  
    
 /** * assume n1 < n2

全部评论 (0)

还没有任何评论哟~