这个题!!我觉得好熟悉!!应该是在编程之美上见过!
题目要求:给定单链表L和n n表示需要删掉的倒数第n个节点
思路:最开始蹦上脑子的就是 遍历->得节点数->再遍历max-n个节点->删除
然后题目要求是最好一次遍历 突然想到了用快慢指针 两指针之间相差n个节点 当fast->next指针指到NULL时 慢指针也就指向了倒数第n+1个节点 方便删除倒数第n个节点
这里首先需要注意一下当链表只有一个元素并且需要删除倒数第一个节点时 fast会指向NULL 再判断fast->next会出现runtime error 所以需要遍历条件需要时while(fast && fast->next) 同时在这种情况下slow的值就是头指针 如果按照平常情况下的处理 slow->next = slow->next->next 的话 等式左边就已经是NULL了 所以对于删除节点也要特殊处理 这种情况下 直接将头节点往后挪一个就可以了
网友评论