题目一:
给你一个链表,删除链表的倒数第 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]
解法一:
利用一个队列来解决,将要删除结点之前的元素和之后的元素全部入队列,然后再出队列即可。
代码如下:
struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
if (head == NULL||head->next==NULL)return NULL;
queue<int> que;
struct ListNode* p = head;
int count = 0;
while (p)
{
count++;//计算链表中的结点个数
p = p->next;
}
p = head;
while (p)
{
if (que.size() == count - n)//que.size()是要删除结点的之前的所有结点个数
{
p = p->