我有一个链接列表作为1->2->3->4->5->6
我需要把它改成1->6->2->5->3->4
。最后一个元素链接到第一个元素,最后一个元素链接到第二个元素,以此类推。
我用了两个指针,一个快一个慢。一旦到达中心,我就把后半部分的所有元素放到一个堆栈中。[4,5,6]
现在,使用第三个指针,我遍历原始链表并从堆栈中插入节点,即pop [6,5,4]
还有比这更好的解决方案吗?
我认为这是最优的。
我用了两个指针。一个慢的,一次跳一个,另一个快的,一次跳两个。
因此,我找到了中心和中间计数。
现在,从中心到末尾,我对链表进行反向操作。
我现在有两个链表,一个是从开始到中心,另一个是从中心到结束。
只需从列表1中获取一个元素,并将该元素从链接2链接到此,并对两个列表进行自增。不需要额外的空间,时间复杂度为0 (N)