赞
踩
找中间结点(当为偶数时,有两个中间结点,取第二个)
利用快慢指针,slow指针走一步每次,fast指针每次走两步,快指针速度是慢指针的二倍。
如图:
逆置后半截链表(逆置后的新的头结点作为新的中间结点)
比如奇数个【1,2,3,2,1】从头结点和中间节点同时开始遍历,为空结束,如果都相等,说明是回文结构。
偶数个【1,2,2,1】
逆置后半截后,从头结点开始遍历到他的next为空时结束,中间结点同时开始遍历为空时结束,如果值都相等说明是回文结构。
因为这样遍历就可以只遍历一遍,保持时间复杂度是O(N)。
改变链表指针的指向,用三个指针变量分别标记。两个指针用来反转指向,第三个指针用来保存第三个结点,用于继续下一步改变指向。
接下来用第二种方法来解决。
(原来的头结点要指向NULL,head->next->head;)
while(next)
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。