思路:首先可以将降序排列的单链表反转,这样两个链表均为升序,再将两个升序排列的单链表合并成一个升序排列的单链表。于是这里我们需要解决两个问题:
Q1:如何将一个单链表反转?
A1:以一般情况为例,下图(a)是一个单链表,图(b)是对图(a)已经实现若干结点反转的单链表,下一步我们需要对结点i进行反转,我们发现反转结点i之前,需要保存结点i所指的下一个结点j,否则在对结点i反转完成后,链表发生断裂,我们无法再寻找到结点j,也就无法进行后续的反转,同时在反转之前,我们还需要直到当前反转结点i的上一结点h,以让i结点指向h结点。因此,这里我们需要三个链表指针,分别保存当前要反转的结点(不妨设为pCurrentNode),当前要反转的结点的前一结点(不妨设为pPreNode),当前要反转的结点的后一结点(不妨设为pNextNode),对当前结点i反转完成后,我们将pPreNode设为当前结点i,将当前结点pCurrentNode指向要反转的下一结点j,pNextNode指向结点k,重复执行上述过程,直到当前结点pCurrentNode为空,即完成整个链表的反转。
Q2:如何将两个升序排列的单链表(设为pList1和pList2)合成一个升序排列的单链表(设为pMergeList)?
A2:对于两个升序排列的单链表pList1和pList2,我们可以先比较两个链表的头结点,将头结点值小的(假如是pList1)作为加入合并后的链表的末尾,然后将pList1的第二个结点作为头结点,同样对上述两个链表的头结点进行比较,重复上述同样的操作。对于多次重复的操作我们可以用递归完成。这里我们需要注意:如果两个要合并的链表其中一个为空(假设为pList1),则合并后的结果为另一个链表p