编写一个可以删除无头结点单链表的第i个结点的代码
时间: 2024-01-22 11:20:59 浏览: 80
假设我们已经有了一个单链表的头节点 `head`,我们可以按照以下步骤删除第 `i` 个结点:
1. 如果 `i` 为 0 或者 `head` 为 `null`,直接返回。
2. 如果 `i` 为 1,我们需要将 `head` 指向它的下一个结点,然后删除原来的头结点。
3. 如果 `i` 大于 1,我们需要遍历链表找到第 `i-1` 个结点,并记录它的位置为 `prev`。如果 `prev` 为 `null` 或者 `prev.next` 为 `null`,直接返回。否则,我们可以通过 `prev.next = prev.next.next` 来删除第 `i` 个结点。
下面是代码实现:
```java
public void deleteNode(ListNode head, int i) {
if (i == 0 || head == null) {
return;
}
if (i == 1) {
head = head.next;
return;
}
ListNode prev = head;
for (int j = 1; j < i - 1 && prev != null && prev.next != null; j++) {
prev = prev.next;
}
if (prev == null || prev.next == null) {
return;
}
prev.next = prev.next.next;
}
```
需要注意的是,这里我们传入的是头结点 `head`,而不是第一个结点。因此在删除头结点时需要更新 `head` 的值。另外,在遍历链表时,我们需要保证 `prev` 和 `prev.next` 都不为 `null`,否则可能会引起空指针异常。
阅读全文