【链表面试题】遍历一次,删除倒数第 k 个结点(k从1开始),不能用替换删除法

版权声明:如需转载,请注明出处 https://blog.csdn.net/baidu_41813368/article/details/83868778

整体思路

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);
}

测试结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/baidu_41813368/article/details/83868778