(gcc)7-1 两个有序链表序列的合并 (20 分) 已知两个非降序链表序列s1与s2,设计函
时间: 2023-09-08 22:01:50 浏览: 191
gcc_arm-linux-gcc_arm-elf-gcc.rar_arm linux gcc_arm-elf-gcc_elf_
设计一个函数mergeList,用于合并两个非降序链表序列s1和s2。
算法步骤如下:
1. 创建一个新的链表头结点newHead。
2. 分别用两个指针p1和p2指向s1和s2的头结点。
3. 如果p1和p2都不为空,则比较p1和p2指向的节点的值,将较小的节点加入新链表,并将较小节点所在链表的指针后移一位。
4. 如果p1为空但p2不为空,则将p2所指节点加入新链表,并将p2后移一位。
5. 如果p2为空但p1不为空,则将p1所指节点加入新链表,并将p1后移一位。
6. 重复步骤3至5,直到p1和p2都为空。
7. 返回新链表的头结点newHead。
该算法的时间复杂度为O(n),其中n为两个链表的总节点数。
图示示例:
假设s1链表为:1 -> 3 -> 5 -> 7 -> null
s2链表为:2 -> 4 -> 6 -> 8 -> null
执行mergeList(s1, s2)的结果为:
newHead -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> null
注意:以上是非降序链表的合并,即节点的值按照从小到大的顺序排列。如果是非升序链表(即节点的值按照从大到小的顺序排列),只需要在步骤3中比较大小时改为找到较大的节点即可。
阅读全文