整体思路
1.上次所学方法的延伸找到倒数第K个结点
2.找到倒数第K+1个结点
3.倒数K+1的结点指向K结点的下一个结点
代码
// 遍历一次,删除倒数第 k 个结点(k从1开始),不能用替换删除法
void RemoveK(SListNode *pFirst, int k) {
k = 2;
k = k + 1;
SListNode *forward = pFirst;
SListNode *backward = pFirst;
while (k--) {
forward = forward->Next;
}
while (forward != NULL) {
forward = forward->Next;
backward = backward->Next;
}
SListNode *a = backward->Next->Next;
backward->Next = a;
}
void TestRemoveK() {
SListNode *First = NULL;
SListPushBack(&First, 1);
SListPushBack(&First, 2);
SListPushBack(&First, 3);
SListPushBack(&First, 4);
SListPushBack(&First, 5);
SListPushBack(&First, 6);
SListPrint(First);
RemoveK(First, 2);
SListPrint(First);
}