剑指offer--面试题13:在O(1)时间删除链表结点

来源:互联网 发布:淘宝商品管理 编辑:程序博客网 时间:2024/05/18 01:07

#include<stdio.h>#include<malloc.h>typedef struct node{int data;struct node *next;}Node,*LinkList;LinkList Create_Tail_LinkList(LinkList  &L,int length)  //尾插法建单链表{Node * s,*r;L=(LinkList)malloc(sizeof(Node));L->next=NULL;r=L;  //尾指针for(int i=0;i<length;++i){s=(Node*)malloc(sizeof(Node));scanf("%d",&s->data );r->next =s;r=s;}r->next =NULL;return L;}void Print_LinkList(LinkList L){Node *p;p=L->next;if(!p)printf("空表!\n");while(p){printf("%d ",p->data);p=p->next;}printf("\n");}Node* Find_Node(LinkList L, int data){Node *p;p=L->next;while(p&&p->data!=data){p=p->next;}return p;}void Delete(LinkList &L,Node* p){if(!L->next ||!p)return ;if(p->next !=NULL){Node *p_next=p->next;p->data =p_next->data ;p->next =p_next->next ;free(p_next);}else if(L->next ==p){L->next =NULL;free(p);}else{Node *q=L->next ;while(q->next !=p){q=q->next ;}q->next =p->next ;free(p);}}void main(){LinkList L;Node *p;int length;int data;printf("请输入表长:");scanf("%d",&length);L=Create_Tail_LinkList(L,length);Print_LinkList(L);printf("请输入删除的结点:");scanf("%d",&data);p=Find_Node(L,data);Delete(L,p);Print_LinkList(L);}


0 0
原创粉丝点击