三步翻转法
Posted roni-i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三步翻转法相关的知识,希望对你有一定的参考价值。
class Solution
public void reverse(char[] ch, int l ,int r)
for ( ; l<r; l++,r--)
char t = ch[l];
ch[l] = ch[r];
ch[r] = t;
public void fun(String str, int n, int m)
if(str == null || str.length()==0) return;
m %= n;
char[] ch = str.toCharArray();
reverse(ch, 0, m-1);
reverse(ch, m, n-1);
reverse(ch, 0, n-1);
for(int i=0; i<ch.length; i++)
System.out.print(ch[i]);
public static void main(String[] args)
String s = "abcdef";
new Solution().fun(s,6,4); //前四个字符移到末尾:efabcd
- Reverse Nodes in k-Group
Hard
1244
257
Favorite
Share
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
Example:
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
Note:
Only constant extra memory is allowed.
You may not alter the values in the list‘s nodes, only nodes itself may be changed.
/**
* Definition for singly-linked list.
* public class ListNode
* int val;
* ListNode next;
* ListNode(int x) val = x;
*
*/
class Solution
public ListNode reverseKGroup(ListNode head, int k)
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pre = dummy;
ListNode end = dummy;
while(end.next != null)
for(int i=0; i<k && end != null; i++) end = end.next;
if(end == null) break;
ListNode start = pre.next;
ListNode next = end.next;
end.next = null;
pre.next = reverse(start);
start.next = next;
pre = start;
end = pre;
return dummy.next;
public ListNode reverse(ListNode head)
ListNode pre = null;
while(head != null)
ListNode next = head.next;
head.next = pre;
pre = head;
head = next;
return pre;
以上是关于三步翻转法的主要内容,如果未能解决你的问题,请参考以下文章