题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
这个题目的坑点是被删除的节点是头节点~我的错误点哈哈
主要思路还是非常普通的,首先遍历整个链表序列,得到一共的节点数量,然后就可以知道倒数第k个节点具体是哪一个
然后就是判断,需要被删除的节点是否是头节点。
如果是头节点,则将head->next保存并且return,并且free(head)
如果不是头节点,则移动一个指针到被删除的节点的前一个,执行操作del_head->next = del_node->next,然后再free(del_node)即可。del_head就是被删除的节点的父节点,del_node就是被删除的节点。
不知道有没有大佬有更加便捷的方法~
struct ListNode* removeNthFromEnd(struct ListNode* head, int n ) {
// write code here
int cnt = 0;
struct ListNode* tran = head;
while(tran!=NULL)
{
cnt++;
tran = tran->next;
}
int del_pos = cnt - n;
if(del_pos==0)
{
struct ListNode* output = head->next;
free(head);
return output;
}
else
{
struct ListNode* del_head = head;
for(int i=0;i<del_pos-1;i++)
{
del_head = del_head->next;
}
struct ListNode* del_node = del_head->next;
del_head->next = del_node->next;
free(del_node);
return head;
}
}


