leetcode92~Reverse Linked List II

来源:互联网 发布:科隆群岛 知乎 编辑:程序博客网 时间:2024/06/08 10:13

Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

根本还是单链表的翻转,只不过需要预先保存好一些节点的值

public class ReverseLinkedListII {    public ListNode reverseBetween(ListNode head, int m, int n) {        if(head==null || m>n) {            return null;        }        //设置一个dummyNode 便于操作        ListNode dummyNode = new ListNode(-1);        dummyNode.next = head;        head = dummyNode;        //到m-n区间前面一个节点        for(int i=1;i<m;i++) {            if(head==null) {                return null;            }            head = head.next;        }        //保存n-m区间前一个节点        ListNode pre = head;        //保存n-m区间第一个节点        ListNode fNode = head.next;        ListNode lastNode = null;        ListNode curNode= fNode;        for(int i=m;i<=n;i++) {            ListNode tmp = curNode.next;            curNode.next = lastNode;            lastNode = curNode;            curNode = tmp;        }        pre.next = lastNode;        fNode.next = curNode;        return dummyNode.next;    }}
0 0
原创粉丝点击