这两周略有偷懒,没有按时写博客,要坚持!
本周题目
给定一个链表,删除链表的倒数第 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-