leetcode92. Reverse Linked List II
2017-03-17 13:50
375 查看
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.
Subscribe to see which companies asked this question.
思路:将中间部分的链表逆序即可。
总结: 对于链表的操作,可以加个头结点使得操作更加的方便。
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.
Subscribe to see which companies asked this question.
思路:将中间部分的链表逆序即可。
总结: 对于链表的操作,可以加个头结点使得操作更加的方便。
我的方案: public static ListNode solution(ListNode head, int m, int n) { if (n == m) return head; ListNode prev, current; prev = current =head; if (m == 1) { // 为链表设置个头结点, 更容易操作,主要是这里需要对m==1时 prev进行定义。 我们可以就加头结点,不区分m是否=1 prev = new ListNode(0); prev.next = head; head = prev; } int i =1; for (;i<m;i++) { prev = current; current = current.next; } ListNode tmp = current; while (i++!=n) { current = tmp.next; tmp.next = current.next; current.next = prev.next; prev.next = current; //对中间部分翻转,注意指针操作的顺序,画图可以更清晰 } if (m == 1) return head.next; return head; }
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 list dummy.next = head; // make a pointer pre as a marker for the node before reversing for(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 reversed ListNode then = start.next; // a pointer to a node that will be reversed // 1 - 2 -3 - 4 - 5 ; m=2; n =4 ---> pre = 1, start = 2, then = 3 // dummy-> 1 -> 2 -> 3 -> 4 -> 5 for(int i=0; i<n-m; i++) { start.next = then.next; then.next = pre.next; pre.next = then; then = start.next; } // first reversing : dummy->1 - 3 - 2 - 4 - 5; pre = 1, start = 2, then = 4 // second reversing: dummy->1 - 4 - 3 - 2 - 5; pre = 1, start = 2, then = 5 (finish) return dummy.next; }
相关文章推荐
- [leetcode] 92. Reverse Linked List II 解题报告
- Leetcode 92. Reverse Linked List II
- LeetCode *** 92. Reverse Linked List II
- leetcode 92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II
- leetcode:92. Reverse Linked List II(Java)解答
- [Leetcode] 92. Reverse Linked List II
- [leetcode] 【链表】92. Reverse Linked List II
- [LeetCode] 92. Reverse Linked List II
- LeetCode - 92. Reverse Linked List II
- [leetcode] 92. Reverse Linked List II
- LeetCode --- 92. Reverse Linked List II
- LeetCode 92. Reverse Linked List II
- [Leetcode]92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II 翻转链表2 解题报告
- LeetCode 92. Reverse Linked List II
- [LeetCode] 92. Reverse Linked List II
- 【LeetCode】92. Reverse Linked List II 解法及注释
- 【leetcode】92. Reverse Linked List II
- LeetCode 92. Reverse Linked List II