Leetcode 92. 反转链表 II
Posted 阿十三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 92. 反转链表 II相关的知识,希望对你有一定的参考价值。
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL
思路:分成两个情况来写
第一种:如果m=1,那就是一道反转链表,先翻转m-n的节点,翻转后,头结点就变成了尾节点,所以把这些节点保存起来,然后再把后面的节点接到尾节点
第二种:如果!=1,翻转m到n的中间节点即可
1 public class 反转链表II { 2 ListNode reverseBetween(ListNode head, int m, int n) { 3 if(head==null||head.next==null) 4 return head; 5 6 if(m!=1) 7 { 8 ListNode first=head;//记录翻转处的前一个节点 9 ListNode temp=head.next;//记录尾节点 10 for(int i=0;i<m-2;i++) 11 { 12 temp=temp.next; 13 first=first.next; 14 } 15 ListNode la=temp; 16 ListNode pre=temp;//反转的起始节点 17 ListNode p=temp.next; 18 ListNode next=null; 19 for(int i=0;i<n-m;i++) 20 { 21 next=p.next; 22 p.next=pre; 23 pre=p; 24 p=next; 25 } 26 first.next=pre; 27 la.next=p; 28 29 } 30 else { 31 ListNode pre=head; 32 ListNode la=pre; 33 ListNode p=head.next; 34 ListNode next=null; 35 36 for(int i=0;i<n-m;i++) 37 { 38 next=p.next; 39 p.next=pre; 40 pre=p; 41 p=next; 42 } 43 la.next=p; 44 return pre;//反转后的头结点 45 46 } 47 48 return head; 49 } 50 public static void main(String argc[]) 51 { 52 53 } 54 }
以上是关于Leetcode 92. 反转链表 II的主要内容,如果未能解决你的问题,请参考以下文章