1、思路
书中描述的方法稍显复杂,这里用一种更简单的思路:
快慢指针指向头结点,快指针先往前移动
K
步;若快指针遍历完链表后,
K
大于0
,表示K
的值已经超过了链表本身的长度,即不存在倒数第K
个节点;快慢指针同时往前走,快指针走到链表尾部时,慢指针所指的就是倒数第
K
个节点。因为慢指针比快指针少走了K
步,故快指针走完链表时,慢指针刚好走到链表的倒数第K
个节点。
2、代码
list_node * remove_last_kth_node(list_node * head, int K) { auto fast = head, slow = head; while (K -- && fast->next != nullptr) fast = fast->next; if (K > 0) return nullptr; //判断倒数第K个节点是否存在 while (fast->next != nullptr) { fast = fast->next; slow = slow->next; } slow->next = slow->next->next; //跳过倒数第K个节点 return head; }