您的位置:首页 > 职场人生

剑指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);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: