剑指offer--面试题13:在O(1)时间删除链表结点
2017-04-22 21:09
741 查看
#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); }
相关文章推荐
- 【剑指offer 面试题13】在 O(1) 时间删除链表结点
- 剑指offer-面试题13-在O(1)时间删除链表结点
- 剑指offer之面试题13在O(1)时间删除链表结点
- 剑指offer-面试题 13:在 O( 1)时间删除链表结点
- 【剑指Offer】面试题13:在O(1)时间删除链表结点
- 剑指Offer----面试题13:在O(1)时间删除链表结点
- [剑指offer][面试题13]在O(1)时间删除链表结点
- 剑指offer面试题13——在O(1)时间删除链表结点
- 剑指Offer面试题12打印1到最大的n位数,面试题13在O(1)时间删除链表结点
- 剑指Offer_面试题13_在O(1)时间删除链表结点
- 【面试题】剑指offer13--在O(1)时间删除链表结点
- 【剑指offer】面试题13、在 O(1)时间上删除链表结点
- 【剑指Offer学习】【面试题13 :在O(1)时间删除链表结点】
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 【剑指offer】面试题13:在O(1)时间删除出链表结点
- 剑指offer-13:在O(1)时间删除链表结点
- 剑指offer 面试题13 在O(1)时间删除给定结点
- 剑指offer代码分析——面试题13在O(1)内删除链表结点
- 剑指Offer-13-在O(1)时间删除链表结点