给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1 输出:[]
示例 3:
输入:head = [1,2], n = 1 输出:[1]
package List;
public class LeetCode19_01 {
public static void main(String[] args) {
int n = 3;
// 调用LinkedList来初始化链表
ListNode head = LinkedList.createList(1, 3, 5, 6, 8);
// 调用 removeFromEnd 方法
ListNode newHead = removeFromEnd(head,n);
// 打印结果
print(newHead);
}
public static ListNode removeFromEnd(ListNode head, int n){
//设置虚拟头结点,值为0
ListNode dummy = new ListNode(0);
//虚拟头结点指向头结点head
dummy.next = head;
//设置快慢指针为虚拟头结点
ListNode fast = dummy;
ListNode slow = dummy;
//设置fast比slow多走n+1步
for (int i = 0; i <= n; i++) {
fast = fast.next;
}
//当fast指向空时(即最后一个节点的后面)停止
while (fast != null){
fast = fast.next;
slow = slow.next;
}
//此时slow来到了目标节点的前一个,进行删除操作即可
slow.next = slow.next.next;
//返回头结点
return dummy.next;
}
public static void print(ListNode head) {
ListNode current = head;
while (current != null) {
System.out.print(current.val + " ");
current = current.next;
}
System.out.println("");
}
}