题目描述:
方法一:栈
class Solution { public ListNode reverseKGroup(ListNode head, int k) { Deque<ListNode> stack = new ArrayDeque<>(); ListNode dummy = new ListNode(0); ListNode p = dummy; while(true){ int count = 0; ListNode tmp = head; while(tmp != null && count <k){ stack.add(tmp); tmp = tmp.next; count++; } if(count != k){ p.next = head; break; } while(!stack.isEmpty()){ p.next = stack.pollLast(); p = p.next; } p.next = tmp; head = tmp; } return dummy.next; } }
方法二:尾插法
class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode dummy = new ListNode(0); dummy.next = head; ListNode pre = dummy; ListNode tail = dummy; while(true){ int count = 0; while(tail != null && count !=k){ count++; tail = tail.next; } if (tail == null) break; ListNode head1 = pre.next; while(pre.next != tail){ ListNode cur = pre.next; pre.next = cur.next; cur.next = tail.next; tail.next = cur; } pre = head1; tail = head1; } return dummy.next; } }
方法三:递归
class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode cur = head; int count = 0; while (cur != null && count != k){ cur = cur.next; count++; } if (count == k){ cur = reverseKGroup(cur,k); while(count != 0){ count--; ListNode tmp = head.next; head.next = cur; cur = head; head = tmp; } head = cur; } return head; } }