【leetcode刷题笔记】Reverse Linked List II
2014-07-17 16:49
483 查看
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given
return
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
题解:
如上图所示,几个重要的变量:
prev记录m位置前一个位置上的ListNode,当完成2~5这一段的反转后,prev的next指针要设置成反转后的序列的第一个指针;
head记录要反转的子列表的第一个ListNode;
kepeler记录要反转的子列表的最后一个ListNode;
有一种特殊的情况如下图所示:
当要反转的序列的第一个ListNode就是链表的头结点的时候,prev指针为空。这时候反转后的链表头节点变成上述kepeler所指向的节点,所以要在最后单独处理。
代码中21~25行的循环找到prev和head的位置,27~31行的循环找到kepeler的位置,33~39行的for循环将链表制定范围的链表反转。41行进行判断:反转后序列的头节点是否变成要反转的列表的最后一个节点——kepeler,如果是,返回kepeler,否则返回之前保存的原链表头结点。
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.
题解:
如上图所示,几个重要的变量:
prev记录m位置前一个位置上的ListNode,当完成2~5这一段的反转后,prev的next指针要设置成反转后的序列的第一个指针;
head记录要反转的子列表的第一个ListNode;
kepeler记录要反转的子列表的最后一个ListNode;
有一种特殊的情况如下图所示:
当要反转的序列的第一个ListNode就是链表的头结点的时候,prev指针为空。这时候反转后的链表头节点变成上述kepeler所指向的节点,所以要在最后单独处理。
代码中21~25行的循环找到prev和head的位置,27~31行的循环找到kepeler的位置,33~39行的for循环将链表制定范围的链表反转。41行进行判断:反转后序列的头节点是否变成要反转的列表的最后一个节点——kepeler,如果是,返回kepeler,否则返回之前保存的原链表头结点。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { int HeadNodes = 0; ListNode answer = head; ListNode prev = null; if(head == null || m >= n) return answer; while(HeadNodes+1 < m){ prev = head; head = head.next; HeadNodes++; } ListNode kepeler = head; while(HeadNodes+1 < n){ kepeler = kepeler.next; HeadNodes++; } for(int i = 0;i < n-m;i++){ ListNode temp = head.next; head.next = kepeler.next; kepeler.next = head; head = temp; } if(prev == null) return kepeler; else{ prev.next = kepeler; return answer; } } }
相关文章推荐
- leetcode笔记--Reverse Linked List II
- LeetCode刷题笔记(链表):reverse-linked-list-ii
- [LeetCode] Reverse Linked List II
- LeetCode —— Reverse Linked List II
- LeetCode: Reverse Linked List II
- [Leetcode]Reverse Linked List II
- leetcode 41: Reverse Linked List II
- LeetCode:Reverse Linked List II
- [leetcode] Reverse Linked List II
- leetcode--Reverse Linked List II
- LeetCode-Reverse Linked List II
- [Leetcode 73] 92 Reverse Linked List II
- [leetcode]Reverse Linked List II
- [Leetcode] Reverse Linked List II
- Leetcode: Reverse Linked List II
- [LeetCode] Reverse Linked List II 解题报告
- leetcode 76: Reverse Linked List II
- 【LeetCode with Python】 Reverse Linked List II
- LeetCode: Reverse Linked List II
- LeetCode Online Judge 题目C# 练习 - Reverse Linked List II