给你一个链表,删除链表的倒数第?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] ?
提示:
链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= sz
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public static ListNode removeNthFromEnd(ListNode head, int n) {
int length = 1;
ListNode cur = head;
????????//得到链表的总长度
while (cur.next != null) {
cur = cur.next;
length++;
}
if(length==1){
return null;
}
if(n==length){
????????//删除头结点 一定要加这句话,不然当链表为1,2
????????//删除的是倒数第2个结点的时候会删错
return head.next;
}
int count = 0;
ListNode pre = head;
cur = pre.next;
????????//单链表的删除需要借助辅助指针
????????//找到倒数第n个结点
while(count<length-n-1){
pre = cur;
cur = cur.next;
count++;
}
????????//删除
if(cur!=null) {
pre.next = cur.next;
}
return head;
}
|