力扣网上的原题。
给定一个链表,反转其中的第m到第n个结点,输出反转完成之后的链表
例如:1->2->3->4->5 m=2, n=4 输出为: 1->4->3->2>5
处理方案:链表切分成三段,第一段放置1-(m-1)的链表。
第二段放置m到n结点的反转链表
第三段放置剩余的链表
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { ListNode dummyhead = new ListNode(-1); //新建一张空白链表 dummyhead.next=head; //空白链表的下一个结点放置题中给定链表 ListNode newlistNode = dummyhead; //新建输出链表 for ( int i = 1; i < m; i ++ ) { newlistNode = newlistNode.next; //把1到m-1的链表放置到输出链表中 } head = newlistNode.next; //head 代表M结点的链表,反转链表的头结点 ListNode start = newlistNode.next; //start 代表反转链表的头结点 ListNode per = null; ListNode cur = null; for(int i=0;i<=n-m;i++){ //链表反转 cur=head.next; head.next=per; per=head; head = cur; } newlistNode.next=per; //反转后链表的头结点 start.next =head; //head代表第三段链表,把反转链表的尾结点指向第三段链表的头结点 return dummyhead.next; //去除头结点-1,输出反转后的链表 }}