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

整体思路

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

测试结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值