删除链表的倒数第n个节点

解题思路:
双指针法。一个指针先走n步后,在一起走,当头指针为null时,second就在要删除的结点的前一个位置,就可以进行删除结点了。
代码:
/* public class ListNode
{
public int val;
public ListNode next;
public ListNode(int x) { val = x; }
}*/
public ListNode RemoveNthFromEnd(ListNode head, int n)
{
ListNode first = head;//先走n步。
ListNode second = head;//再一起走。
for (int i = 0; i < n; i++)
{
first = first.next;
}
if (first == null)
return head.next;//如果first先走n步后就已经为null了,说明要删除的是头结点,返回头结点的下个结点。
while (true)
{
first = first.next;
if (first == null)
break;//直到first走到null,此时second才走到要删除的结点的前一个。
else
second = second.next;
}
second.next = second.next.next;//删除要删除的结点。
return head;
}


被折叠的 条评论
为什么被折叠?



