上一期我给大家讲解和介绍了单链表的头插法和尾插法,今天我将为大家带来综合性的代码考研真题实战,依次作为一个机会来锻炼自己的代码能力。此次我们将实战考研2019年的408。
首先我们先分析题干理解题干,重点词带头结点的单链表,并且空间复杂度为O(1),分析最初的L与L~的区别。下面我们开始正式实战:
首先设计思路:(1)空间复杂度为O(1)的意思为我们设计的程序不会在过多的去申请空间,如果在原来链表的基础上重新申请了空间则空间复杂度不为O(1)。
(2)观察线性表中数据的变化,可知将原有的单链表一分为二,然后将后半部分的单链表逆放置,最后将逆放置的单链表重新插入前半部分的表,从而形成一个新的单链表。
(3)在将线性表一分为二,我们可以使用双指针法进行整个单链表的便利,从而使其空间复杂度始终为(1),两个指针的运行思路为,其中一个指针走两步(P2),另外一个指针走一步(P1),这个地方不好理解,希望读者在阅读过程中自己画图去切身的感受,学习最重要的就是知行合一,大家一定要自己去动手画图理解感悟。
(4)我们需要一个新的头结点去接收我们将原来单链表断开的后半部分,然后使这个新的单链表原地逆置,原地逆置我们需要用到三个指针,代码中分别用的为r、s、t。
(5)最后