1.题目
给你一个链表,删除链表的倒数第
n
个结点,并且返回链表的头结点。
2.代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummyHead = new ListNode();//创建一个虚拟节点
dummyHead.next = head;//使虚拟节点的下一个结点指向头结点
ListNode slow = dummyHead;//定义一个慢指针
ListNode fast = dummyHead;//定义一个快指针
for(int i=0; i<n+1; i++){
fast = fast.next;//先让快指针移动n+1步
}
while(fast!=null){//只要满足条件就继续移动slow和fast
slow = slow.next;
fast = fast.next;
}
//运行出来到这一步表示slow指向了要删除元素的上一步
slow.next = slow.next.next;//表示删除元素
return dummyHead.next;//返回此时的头结点
}
}
3.图解