有P1, P2两个指针,P1从头开始跑,先跑K个节点,然后P2开始跑,当P1跑到头时,P2指向的就是倒数第K个节点了。
这道题的思路比较简单,要想做得更好,可以加入一些鲁棒性的考虑,比如说空链表情况,链表长度小于k等。
下面是代码:
#include <iostream>
struct Node{
int val;
struct Node* next;
};
class solution{
public:
bool DeleteBack(Node *ptr, int k){
if (ptr == NULL) return false;
Node *p1 = ptr;
Node *p2 = ptr;
k--;
while (k && p2 != NULL){
k--;
p2 = p2->next;
}
if (k != 0) return false;
Node *prev = p1;
while (p2->next != NULL){
prev = p1;
p1 = p1->next;
p2 = p2->next;
}
//delete node
prev->next = p1->next;
delete p1;
return true;
}
};