从无头单链表中删除节点
来源:互联网 发布:淘宝土特产交易数据 编辑:程序博客网 时间:2024/05/16 03:45
//编程之美上的题目,这个题目有两个限制条件,被删除的节点不能是第一个和最后一个//1.不能删除最后一个节点的原因是,将会导致倒数第二个节点指向一个被删除的指针//2.为什么不能删除第一个节点? //使用了狸猫换太子技术,删除下一个节点,将下一个节点的数据拷贝到上一个节点 #include<stdio.h>#include<stdlib.h>#include<assert.h>typedef struct Node{ int data; Node* next;};void deleteMidNode(Node* p){ assert(p!=NULL); Node* pnext=p->next; if(pnext!=NULL){ p->next=pnext->next; p->data=pnext->data; delete pnext; }}void print(Node* hd){ //这儿写成了p++,显然错误 for(Node* p=hd->next;p;p=p->next) printf("%d ",p->data); printf("\n");}int main(){ int a[5]={1,2,3,4,5}; Node* head=new Node; head->next=NULL; for(int i=0;i<5;i++){ Node* tmp=new Node; tmp->data=a[i]; tmp->next=head->next; head->next=tmp; } print(head); deleteMidNode(head->next->next); print(head); system("pause"); return 0;}