📅  最后修改于: 2023-12-03 15:40:00.641000             🧑  作者: Mango
本文将介绍数据结构中链表的问题 7,并提供解决方案和代码实现。
问题 7:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
例如:给定一个链表: 1->2->3->4->5,和 n = 2
当删除倒数第二个节点后,链表变为 1->2->3->5。
我们可以使用双指针来解决该问题。
首先让一个指针指向链表的头部,然后再让另一个指针指向第 n 个节点。
接着,我们让两个指针同时向后移动,直到第二个指针指向 null。
此时,第一个指针所指位置即为要删除的节点的前一个节点。我们可以通过这个节点来删除要删除的节点。
下面是该问题的代码实现,使用 Java 语言编写。
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode fast = dummy;
ListNode slow = dummy;
// 让 fast 指针指向第 n 个节点
for (int i = 0; i < n; i++) {
fast = fast.next;
}
// 让 fast 和 slow 同时向后遍历,直到 fast 指向 null
while (fast != null && fast.next != null) {
fast = fast.next;
slow = slow.next;
}
// 删除要删除的节点
slow.next = slow.next.next;
return dummy.next;
}
以上代码中,我们通过 dummy 节点来避免了删除头节点的特殊情况。
本文介绍了数据结构中链表的问题 7,并提供了基于双指针的解决方案和 Java 代码实现。
双指针算法是解决链表问题的一种常用方法,希望本文可以帮助读者更好地理解和应用该算法。