反转部分单向链表

1:题目

给定一个单向链表的头节点head,以及两个整数from和to,在单项链表上把第from个节点到to个节点的这一部分进行反转。

例如:

1->2->3->4->5->null from=2,to=4

调整结果为1->4->3->2->5->null

再如

1->2->3->null from=1,to=3

调整结果为3->2->1->null

2:要求

1:要求时间的复杂度为O(n),额外的空间复杂度为O(1)

2:如果不满足1<=from<=to<=N,则不用调整

 

3:解答

1:先判断是否满足1<=from<=to<=N,如果不满足,直接返回原来的头节点

 

2:找到第from-1个节点pre和第to+1个节点pos,pre即是要反转部分的前一个节点,pos即是反转部分的后一个节点,把反转的部分先反转,然后正确的连接pre和pos。

 

3:如果pre为null,说明反转的部分是含有头节点的,则返回的新的节点,即是反转前的最后一个节点,也是反转后的第一个节点,如果pre不为null,则直接返回旧的头节点。

4:代码

反转部分单向链表

 

如果你喜欢,或者想要学习更多算法题目,请关注下面微信哦~

 

反转部分单向链表