题目
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
提示:
链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn2925/
来源:力扣(LeetCode)
题中所给
struct ListNode
{
int val;
struct ListNode *next;
};
写了很多遍,每次总忘记只有一个元素时的判断
struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
struct ListNode* p;
int len = 1;
for (p = head->next; p != NULL; p = p->next)
{
len++;
}
if (n > len || n <= 0)return NULL;
if (n == len)
{
head = head->next;
return head;
}
n = len - n - 1;
int i = 0;
for (p = head; i < n; p = p->next, i++)
{
;
}
struct ListNode* q = p->next;
if (p->next!=NULL)p->next = q->next;
else p->next = q;
free(q);
return head;
}