首先上一个经典单链表反转
public static ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
k个节点为一组的链表反转
原理图:
实现代码:
public static ListNode reverseListByNumber(ListNode head, int k) {
ListNode prev = null;
ListNode curr = head;
ListNode first = null;
ListNode dummyHead = new ListNode(0);
ListNode conn = dummyHead;
while (curr != null) {
int count = k;
first = curr;
while (count-- != 0 && curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
conn.next = prev;
conn = first;
}
conn.next = null;
return dummyHead.next;
}