题目
给定一个链表,删除链表的倒数第n个节点并返回链表的头指针
示例
给出的链表为:1->2->3->4->5, n= 2.
删除了链表的倒数第n个节点之后,链表变为1->2->3->5.
思路
采用双指针的方式,前指针和后指针的距离保持n,当后指针为null时,前指针刚好指向倒数第n+1个节点。
代码
public ListNode removeNthFromEnd (ListNode head, int n) {
// write code here
ListNode h = new ListNode(0);
h.next = head; // 添加额外节点解决边界问题,如输入为{1},1
ListNode h1 = h;
ListNode h2 = h;
// 两指针距离为n
for(int i = 0;i <= n;i++){
h2 = h2.next;
}
while(h2 != null){
h1 = h1.next;
h2 = h2.next;
}
if(h1 != null && h1.next != null){
h1.next = h1.next.next;
}
return h.next;
}