题解 | #删除链表的倒数第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; } }