当前位置 : 主页 > 手机开发 > ROM >

[leetcode]92. Reverse Linked List II反转链表2

来源:互联网 收集:自由互联 发布时间:2021-06-10
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 题意: 给定一个链表,反转第m~n个节点。 反转链表的

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

 

题意:

给定一个链表,反转第m~n个节点。

 

反转链表的一般思路

分享图片

 

 

Solution1:

1.用指针找到m和n位置

2.反转m和n之间的链表

分享图片

分享图片

 

code

 1 class Solution {
 2     public ListNode reverseBetween(ListNode head, int m, int n) {
 3          if(head==null) return head;
 4 
 5         ListNode dummy = new ListNode(-1);
 6 
 7         dummy.next = head;
 8 
 9         ListNode mNode = head;
10         ListNode preM = dummy;
11         ListNode nNode = head;
12 
13         for (int i = 1; i < m ; i++) {
14             preM = mNode;
15             mNode = mNode.next;
16         }
17 
18         for (int i = 1; i <n ; i++) {
19             nNode = nNode.next;
20         }
21 
22         while(mNode != nNode){
23             preM.next = mNode.next;
24             mNode.next = nNode.next;
25             nNode.next = mNode;
26             mNode = preM.next;    
27         }
28         return dummy.next;   
29     }
30 }
网友评论