题目
使用双指针,一个指针先遍历n次,然后两个指针一起遍历,使另一个指针指向被删除的节点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode *PNode;
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
PNode p1=head;
PNode p2=head;
PNode pre=p1;
while(n)
{
p2 = p2->next;
n--;
}
while(p2 != NULL)
{
pre = p1;
p2 = p2->next;
p1 = p1->next;
}
if(p1==head) //删除头节点的特殊情况
head=head->next;
else
pre->next = p1->next;
return head;
}