92. Reverse Linked List II

Reverse a linked list from position m to n. Do it in one-pass.

Note: 1 ≤ m ≤ n ≤ length of list.

Example:

Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL

思路:
类似于Reverse Linked List I, 思路自然而然的是:在遇到起始点的时候,断开其前面的链表连接,因此flag == m - 1时断开。之后在后面的子链表进行反转,停止条件为flag == n - 1,即类似于pivot.next == null。(加头节点便于操作)

Solution

class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        int flag = 0;
        ListNode k = new ListNode(0);
        k.next = head;
        if (m == n){
            return head;
        }else{
            ListNode ps = k;
            while (flag != m - 1){
                k = k.next;
                flag += 1;
            }
            ListNode pn = k.next;
            ListNode pivot = pn;
            k.next = null;
            ListNode front = null;
            while (flag != n - 1){
                front = pivot.next;
                pivot.next = pivot.next.next;
                front.next = pn;
                pn = front;
                flag += 1;
            }
            k.next = pn;
            return ps.next;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容