【题目】
分别实现两个函数,一个可以删除单链表中的倒数第K个节点,另一个可以删除双链表中倒数第K个节点
public Node<Integer> deleteKthNode(Node<Integer> head, int k) {
/*
若节点的长度为n, 需要删除的节点就是第 n - k + 1, 需要删除的上一个节点就是第n - k个节点
*/
if (head == null || k < 1) {
return head;
}
Node<Integer> cur = head;
int n = 0;
while (cur != null) {
n++;
cur = cur.next;
}
int preIndex = n - k;
if (preIndex < 0) {
return head;
} else if (preIndex == 0) {
return head.next;
} else {
cur = head;
while (--preIndex != 0) {
cur = cur.next;
}
cur.next = cur.next.next;
return head;
}
}
DoubleNode<Integer> deleteKthDoubleNode(DoubleNode<Integer> head, int k) {
/*
若节点的长度为n, 需要删除的节点就是第 n - k + 1, 需要删除的上一个节点就是第n - k个节点
*/
if (head == null || k < 1) {
return head;
}
DoubleNode<Integer> cur = head;
int n = 0;
while (cur != null) {
n++;
cur = cur.next;
}
int preIndex = n - k;
if (preIndex < 0) {
return head;
} else if (preIndex == 0) {
head.next.last = null;
return head.next;
} else {
cur = head;
while (--preIndex != 0) {
cur = cur.next;
}
if (cur.next.next != null) {
cur.next.next.last = cur;
}
cur.next = cur.next.next;
return head;
}
}