将一个升序排列的单链表和一个降序排列的单链表合并成一个升序排列的单链表(优酷土豆2014校园招聘笔试题)

这篇博客讨论了如何将一个升序排列的单链表和一个降序排列的单链表合并成一个升序排列的单链表。首先通过反转降序链表使其变为升序,然后使用递归方法比较两个升序链表的头节点,依次合并成新的升序链表。文章详细阐述了链表反转和两链表合并的具体步骤和实现代码。
摘要由CSDN通过智能技术生成

思路:首先可以将降序排列的单链表反转,这样两个链表均为升序,再将两个升序排列的单链表合并成一个升序排列的单链表。于是这里我们需要解决两个问题:

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为空,即完成整个链表的反转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值