Q92. Reverse Linked List II
Last updated
Was this helpful?
Last updated
Was this helpful?
直达:
Reverse a linked list from positionmton. Do it in-place and in one-pass.
For example:
Given1->2->3->4->5->NULL
, m = 2 and n = 4,
return1->4->3->2->5->NULL
.
Note: Givenm,nsatisfy the following condition: 1 ≤m≤n≤ length of list.
题目要求一次遍历,且不能使用额外的存储空间。首先,设置一个伪头节点dhead(防止m=1)以及三个指针p1 = p2 =d_head, p3 = head。开始从i=1开始遍历到n:
当i<m时,三个指针都向前移动一位
当i=m是,p1停止遍历,此时p1后面就是要反转的链表,p2,p3继续遍历
当i>m且i<=n时,此时需要交换节点,即把p3指向的节点插入到p1后面,如下图
接下来就是链表节点的移动了
移动后如下图
由于不知道红色节点是否存在,所以需要判断p2->next用于决定p3的值