题目传送门:
19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/用指针数组记录链表各个节点的地址,遍历一遍就解决问题
指针数组用 NULL 初始化
遍历同时达成两个目的:1.获取链表大小 2.记录链表各节点地址
遍历完令所删除节点的上一个节点指向所删除节点的下一个节点即可
注意特判 n 为 count 的情况
代码:
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
struct ListNode* arr[32] = {NULL};
int count;
for (count = 0; head; count++)
{
arr[count] = head;
head = head->next;
}
if (count == n) return arr[1];
arr[count - n - 1]->next = arr[count - n + 1];
return arr[0];
}
最近写过不止一道链表与数组结合的题
通常单向不循环链表只能顺着->next一个一个访问过去
但是与数组结合后可以赋予链表一部分顺序表的特点,通过下标就能访问了,这样会简单特别多