从无头单链表中删除节点

来源:互联网 发布:淘宝土特产交易数据 编辑:程序博客网 时间: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;}