c,给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
时间: 2023-06-28 14:13:09 浏览: 106
删除链表的倒数第 N 个结点.md
这个问题可以使用双指针来解决。首先,我们定义两个指针`p`和`q`,它们都指向链表的头结点。然后,我们将`p`向前移动`n`个位置。接着,同时移动`p`和`q`,直到`p`指向链表的最后一个结点。此时,`q`所指向的结点就是要删除的结点的前一个结点。
最后,我们将`q`所指向的结点的`next`指针指向`q.next.next`,即跳过要删除的结点。最后返回原链表的头结点即可。
以下是C语言代码实现:
```c
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
struct ListNode *p = head, *q = head;
for (int i = 0; i < n; i++) {
p = p->next;
}
if (p == NULL) {
return head->next;
}
while (p->next != NULL) {
p = p->next;
q = q->next;
}
q->next = q->next->next;
return head;
}
```
阅读全文