单向链表的反转
public class LinkedNode {
Integer id;
LinkedNode next;
public LinkedNode(Integer id) {
this.id = id;
}
}
//创建链表
LinkedNode node1 = new LinkedNode(1);
LinkedNode node2 = new LinkedNode(2);
LinkedNode node3 = new LinkedNode(3);
//递归该方法
public LinkedNode reverseList(LinkedNode node) {
// 如果为空链表或者只有一个节点的链表则不需要处理
if (node == null || node.next == null) {
return node;
}
// 递归直到找到尾结点
LinkedNode newHead = reverseList(node.next);
// 尾节点反指
node.next.next = node;
// 当前节点指向null节点
node.next = null;
return newHead;
}
根据某个节点进行反转
public LinkedNode reverseKGroup1(LinkedNode head, int k) {
if(head == null || head.next == null || k < 2)
return head;
LinkedNode dummy = new LinkedNode(1);
dummy.next = head;
LinkedNode pre = dummy, cur = head, temp;
int len = 0;
while (head != null) {
len ++ ;
head = head.next;
}
for (int i = 0; i < len / k; i ++ ) {
for (int j = 1; j < k; j ++ ) {
temp = cur.next;
cur.next = temp.next;
temp.next = pre.next;
pre.next = temp;
}
pre = cur;
cur = cur.next;
}
return dummy.next;
}