给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode* q = head;
struct ListNode* dummy = malloc(sizeof(struct ListNode));
dummy->val = 0, dummy->next = head;
struct ListNode* p = dummy;
int i = 0;
for(;i < n;i ++){
q = q -> next;
}
while(q != NULL){
q = q -> next;
p = p -> next;
}
p -> next = p -> next -> next;
struct ListNode* ans = dummy->next;
free(dummy);
return ans;
}