和查找链表倒数第n个节点差不多,不过这里我们先查到倒数第n个的前一个,这样通过a.next指向需删除的下一个节点,这个节点就被删除了。
题目描述:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
示例
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
代码:
老方法,使用双指针;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if( head == null ) return head;
ListNode front = null;
ListNode point = null;
point = head;
front = head;
for( int i = 0; i < n; i++ )
{
if( point.next != null )
point = point.next;
else
return front.next;
}
while( point.next != null ){
front = front.next;
point = point.next;
}
front.next = front.next.next;
return head;
}
}
本文内容只适用于个人,方便以后回看学习。