LeetCode题解:Reverse Linked List II

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.

题意:给定整数m,n和单链表头结点,将链表从m->n的结点顺序逆转,O(n)时间要求

解决思路:先找到m->n子链表头结点的前驱结点,然后改变子链表的顺序就可以了。如题中例子,,找到2->3->4这个子链表,然后得到3->2->4,然后4->3->2

代码:

{public ListNode reverseBetween(ListNode head, int m, int n) {if(head == null) return null;ListNode dummy = new ListNode(0); // create a dummy node to mark the head of this listdummy.next = head;ListNode pre = dummy; // make a pointer pre as a marker for the node before reversingfor(int i = 0; i<m-1; i++) pre = pre.next;ListNode start = pre.next; // a pointer to the beginning of a sub-list that will be reversedListNode then = start.next; (int i=0; i<n-m; i++){start.next = then.next;then.next = pre.next;pre.next = then;then = start.next;}dummy.next;}}

一错再错,把握正确的方向,

LeetCode题解:Reverse Linked List II

相关文章:

你感兴趣的文章:

标签云: