社区
C语言
帖子详情
删除双链表的一个结点?
csutzs
2006-03-30 09:52:32
写一个函数 删除一个双链表的一个结点
...全文
213
7
打赏
收藏
删除双链表的一个结点?
写一个函数 删除一个双链表的一个结点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
du51
2006-03-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;
}
ricky460
2006-03-30
打赏
举报
回复
//假设链表节点类似如下定义
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;
}
michael_g_hu
2006-03-30
打赏
举报
回复
做一个循环,每次保存上一个结点地址,当前结点满足删除条件时,把上个结点的右边指向下个结点,下个结点左边指向上个结点,最后FREE掉就行了
yinqing_yx
2006-03-30
打赏
举报
回复
predelNode->backPtr = delNode->backPtr;
delNode->backPtr->frontPtr=predeNode;
delete deNode;
deNode = 0;
iamcaicainiao
2006-03-30
打赏
举报
回复
作业贴,建议直接用baidu或者google搜一下。
vanlover
2006-03-30
打赏
举报
回复
小测验?
jixingzhong
2006-03-30
打赏
举报
回复
//链表节点定义
struct NODE
{
...
NODE *last, *next ;
... //其它代码
};
//删除节点pDel
void DelNode(NODE *del)
{
(del->last)->next = del->next;
(del->next)->last = del->last;
delete del;
}
删除
循环
双链表
中的第
一个
X
创建
一个
循环
双链表
,P指向第
一个
元素值为X的
结点
,设计
一个
算法从该链表中
删除
*P
结点
。
双链表
的基本操作(创建,插入,
删除
,读取等)
双链表
基本操作的程序,(先在主程序内定义
一个
数组,再把数组内的元素作为
结点
一个
个插入到链表内,显示链表内所有
结点
及链表长度,
删除
某
一个
结点
,再次显示链表内所有
结点
以及链表长度)。
循环
双链表
该循环
双链表
采用纯C编写,其中包含初始化、增加
结点
、修改
结点
和
删除
结点
等
C++实现
双链表
的基本功能
双链表
:在单链表的每个
结点
中,再设置
一个
指向其前驱...,实质上
双链表
是以空间换取时间,虽然
双链表
具有可以反向查找数据的优点但是它也存在缺点:在插入和
删除
一个
结点
时需要维护两个指针变量,特别是在
双链表
的插入
linked-list:C用于单链表和
双链表
修改链表中指定位置
结点
的值 修改链表中指定数据的值 double_list
结点
结构体 双向链表结构体 创建
结点
初始化链表 释放链表 获取链表长度 获取头
结点
获取尾
结点
遍历链表 插入头
结点
插入尾
结点
任意位置插入
结点
...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章