Leetcode035--使用尾插法局部旋转链表

来源:互联网 发布:蚁群算法 python 编辑:程序博客网 时间:2024/06/08 01:26

一、原题


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->NULLm = 2 and n = 4
return 1->4->3->2->5->NULL




二、中文



给定一个单链表,将第m到第n个之间的元素进行转 



三、举例



给出 1->2->3->4->5->NULLm = 2 and n = 4
最后得到 1->4->3->2->5->NULL



四、思路



就是考察尾插法,我们首先找到第一个元素的头结点,然后根据传入的参数来确定两个结点之间的距离,最后根据两个结点之间的距离进行尾插的操作,所谓尾插就是以第一个元素为头,第一个元素左边的元素为尾,然后不断地将头元素后边的元素插入到尾元素的前面,最终达到单链表局部旋转的操作。


五、程序



package code;public class LeetCode48{public static void main(String args[]){ListNode list1 = new ListNode(1);ListNode list2 = new ListNode(2);ListNode list3 = new ListNode(3);ListNode list4 = new ListNode(4);ListNode list5 = new ListNode(5);list1.next = list2;list2.next = list3;list3.next = list4;list4.next = list5;ListNode list = reverseBetween(list1, 2, 5);while(list != null){System.out.print(list.val+" ");list = list.next;}}//将链表以x为依据分割开来public static ListNode reverseBetween(ListNode head, int m, int n) {        ListNode root = new ListNode(0);        ListNode left = root;        root.next = head;        for (int i = 1; i < m && left != null; i++) {        left = left.next;        }if(left.next != null){ListNode mid = left.next;ListNode right;n = n - m + 1;for(int i = 1; i < n && mid.next != null; i++){right = mid.next;//进行所谓的 尾插操作                mid.next = right.next;                right.next = left.next;                left.next = right;}}return head;}}

--------------------------------output-----------------------------------


1 5 4 3 2 





1 0
原创粉丝点击