例题8:合并(相加)多个单向链表,得到新链表。
分析:合并多个链表将多个链表头尾相连合并成一个链表。
算法实现:声明一个临时指针,循环到第一个链表的尾节点,然后把尾节点的后续指针指向第二个链表的头节点,把第二个链表的头指针置空,长度加到第一个链表中,临时指针继续往下,同样的方法合并第剩下的链表(如果存在的话),完成后返回第一个链表。
程序代码:
运行结果:
练习1:把例题8的测试改为合并4个单向链表。
例题9:合并两个有序链表将。
两个有序链表合并成一个,让新链表依然是有序的。算法分析如下:
(1)比较头节点的大小,选小的链表为合并后在载体。
(2)定义2个指针,分别指向载体和被合并链表的头节点。
(3)载体指针前行1。
(4)将2个指针所指向的值进行比较,如果载体的值不大与被合并链表,载体指针继续前行1;否则用被合并链表置换载体剩下的链表;载体剩下的链表就成了被合并链表;如此循环。
(5)如果载体链已到尾节点,仍然小于被合并链,把被合并链接到载体链。把长度相加作为合并后的长度。
程序代码:
运行结果:
练习2:构建三个有序单向链表,然后把它们合并为一个有序单向链表。
学思营编程课堂基于蓝桥STEM86平台https://www.stem86.com,开展学编程三部曲:Scratch(三年级以前)>>>Python(四年级以后)>>>C++(七年级以后)教育实验活动,任何人可以免费参加,打开https://xuesiying.stem86.com网页注册进入课堂,也可关注本公众号留言。更多课程请打开“学思营”同步网站:http://www.5xstar.com/doc.html
参考资料:
1、《Python算法图解》何韬编著 清华大学出版社