删除双链表的一个结点?
写一个函数 删除一个双链表的一个结点
问题点数:50、回复次数:7Top
1 楼vanlover(龙龙)回复于 2006-03-30 09:55:40 得分 0
小测验?Top
2 楼iamcaicainiao(老菜,长征)回复于 2006-03-30 10:05:13 得分 0
作业贴,建议直接用baidu或者google搜一下。Top
3 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-30 10:49:28 得分 5
predelNode->backPtr = delNode->backPtr;
delNode->backPtr->frontPtr=predeNode;
delete deNode;
deNode = 0;Top
4 楼michael_g_hu(一代风云)回复于 2006-03-30 10:53:19 得分 5
做一个循环,每次保存上一个结点地址,当前结点满足删除条件时,把上个结点的右边指向下个结点,下个结点左边指向上个结点,最后FREE掉就行了Top
5 楼ricky460(阿酷)回复于 2006-03-30 11:25:08 得分 10
//假设链表节点类似如下定义
struct NODE
{
NODE* last ;
NODE* next ;
.......... //其它代码
};
//删除函数
void DelNode(NODE*& pDel)
{
NODE* pLast = pDel->last ;
NODE* pNext = pDel->next ;
pLast->next = pNext ;
pNext->last = pLast ;
delete pDel;
}Top
6 楼du51(郁郁思扬)回复于 2006-03-30 11:48:59 得分 30
#include<stdio.h>
#include<stdlib.h>
typedef struct NodeTag{
int val;
struct NodeTag *pre,*next;
}Node,*Link;
Link createNode(int val)
{
Link link=(Link)malloc(sizeof(Node));
if(!link)exit(1);
link->val=val;
link->pre=link->next=NULL;
return link;
}
void insertNode(Link *head,int val)
{
Link p=*head,q;
Link newNode=createNode(val);
if(!*head)*head=newNode;
else
{
while(p)q=p,p=p->next;
q->next=newNode;
newNode->pre=q;
}
}
void createLink(Link *head)
{
int val;
printf("请输入数据以-1结束\n");
scanf("%d",&val);
while(val+1)
{
insertNode(head,val);
scanf("%d",&val);
}
}
void showLink(Link head)
{
while(head)
{
printf("%d ",head->val);
head=head->next;
}
printf("\n");
}
void RshowLink(Link head)
{
Link p=head;
if(!p)return;
while(p->next)p=p->next;
while(p)
{
printf("%d ",p->val);
p=p->pre;
}
printf("\n");
}
void delNode(Link *head,int val)
{
Link p=*head,q;
if(!p)return;
while(p)
{
if(p->val==val)
{
if(p==*head)
{
*head=(*head)->next;
if(*head)(*head)->pre=NULL;
free(p);
p=*head;
}
else
{
q=p->pre;
if(p->next)p->next->pre=q;
q->next=p->next;
free(p);
p=q->next;
}
}
else p=p->next;
}
}
void KdelNode(Link *head)
{
int val;
printf("请输入你要删除的值.\n");
scanf("%d",&val);
delNode(head,val);
}
void destroyLink(Link *head)
{
Link p;
while(*head)
{
p=*head;
*head=(*head)->next;
free(p);
}
}
int main()
{
Link head=NULL;
createLink(&head);
showLink(head);
RshowLink(head);
KdelNode(&head);
showLink(head);
RshowLink(head);
destroyLink(&head);
system("PAUSE");
return 0;
}Top
7 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-30 14:18:59 得分 0
//链表节点定义
struct NODE
{
...
NODE *last, *next ;
... //其它代码
};
//删除节点pDel
void DelNode(NODE *del)
{
(del->last)->next = del->next;
(del->next)->last = del->last;
delete del;
}Top




