删除链表的倒数第几个节点

本文介绍了如何在链表中删除倒数第n个节点的两种解决方案。第一种方法需要知道链表总节点数,通过遍历找到目标节点进行删除。第二种方法使用两个指针同步移动,不需要遍历完整链表。虽然还有其他方法,如利用双向链表,但作者表示自己不熟悉。最后提到即将进行的C语言上机考试,感到紧张。
摘要由CSDN通过智能技术生成

这两周略有偷懒,没有按时写博客,要坚持!

本周题目

给定一个链表,删除链表的倒数第 n 个节点,并且输出删除后的链表。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。

我有两种思路去解决这个问题(是一个带头指针(不存数据,只指向第一个节点)的链表)
1)用一个指针,遍历链表的全部节点,找到第iCount - 1 - n个节点,就是那个要删除的节点。若要删除头节点,则更改头节点;否则直接删除
这种适用于知道链表总共的节点数,需要将整个链表遍历一遍

void Delete(Link *pHead,int pos)           //pos = iCount - 1 - n
{
	int i;
	Link *pBe,*pTemp;                   //*pBe是要删除的节点之前的那个节点,*pTemp为临时节点
	pBe = pTemp =pHead->pNext;
	if(pos != 1){
		for(i = 1;i<pos;i++){
			pBe = pTemp;
			pTemp = pTemp->pNext;
		}
	printf("这个数字是%d\n",pTemp->data); 
	pBe->pNext = pTemp->pNext;
	free(pTemp); 
	}else{
		printf("这个数字是%d\n",pHead-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值