题目链接
描述
给定一个链表,删除链表的倒数第 nn 个节点并返回链表的头指针
例如,
给出的链表为: 1→2→3→4→5,n=2.
删除了链表的倒数第 nn 个节点之后,链表变为1→2→3→5.
备注:
题目保证 n 一定是有效的
请给出请给出时间复杂度为O(n) 的算法
以前写过一个输出倒数第n个节点的,思想都是类似的,都是使用快慢指针,链接在这里以前写的
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
public ListNode removeNthFromEnd (ListNode head, int n) {
// write code here
if(head == null){
return null;
}
ListNode p = head;
ListNode q = head;
ListNode pre = null; //记录签一个元素
int i = 0;
while(i < n){ //q先走
q = q.next;
i++;
}
if(q == null){ // q走到头的话(n的长度等于链表长度),那么倒数第n个节点就是第一个节点,返回头结点的下一个节点即可
return head.next;
}
while(q != null){
q = q.next;
pre = p;
p = p.next;
}
pre.next = p.next; // 删除节点就行了
return head;
}
}