循环链表删除节点操作如何写?

god_sun 2006-10-20 04:56:25
struct SOCKPAIRQUEUE
{
SOCKET *pSrcSock;
SOCKPAIRQUEUE *next;
}

下面这样写对吗?

void vdDelete (SOCKPAIRQUEUE *pSockPair)
{
SOCKPAIRQUEUE *preItem, *tmpItem;

if (m_pstSockList == NULL)
{
return;
}
tmpItem = m_pstSockList;
preItem = tmpItem;
while (tmpItem)
{
if (tmpItem ->pSrcSock == p_pSockPair->pSrcSock)
{
if(m_pstSockList == tmpItem)
{
if(m_pstSockList = m_pstSockList->next)
{
m_pstSockList=NULL;
}
else
{
preItem = m_pstSockList;
while( preItem->next != m_pstSockList )
{
preItem=preItem->next;
}
preItem->next = m_pstSockList->next;
m_pstSockList=m_pstSockList->next;
}
}
else
{
preItem->next = tmpItem->next;

}
delete tmpItem;
tmpItem = NULL;
printf ("%d\n", m_pstSockList);
break;
}
//not the head
preItem = tmpItem;
tmpItem = tmpItem -> next;
if(tmpItem->next == m_pstSockList)
{
break;
}
}
// LeaveCriticalSection (&m_CriticalSection);
}
...全文
320 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
austre 2006-10-20
  • 打赏
  • 举报
回复
在vc6.0的控制台下运行通过:
这里是头文件:
#include<malloc.h>
#include<iostream.h>
typedef struct node
{
int data;
struct node* next;
}node,*linklist;
linklist initlinklist()
{
linklist L;
L=(linklist)malloc(sizeof(node));
L->next =NULL;
return L;
}
int k=0;
int createlinklist(linklist L)
{
int i,j;
node* p;
node* r;
r=L;
cout<<"您准备创建几个结点的链表呢?? ";
cin>>k;
for(i=1;i<=k;i++)
{
cout<<"请输入您的第"<<i<<"个元素的值: ";
cin>>j;
p=(node*)malloc(sizeof(node));
p->data =j;
r->next=p;
r=p;
}
p->next=L;
return 0;
}
int delnode(linklist L)
{
int i,j;
node* p;
node* temp;
p=L;
cout<<"这个循环链表总共有"<<k<<"个结点,你打算删除第几个? ";
cin>>j;
if(j<1||j>k)
{
cout<<"删除的位置是不合理的!!";
return 0;
}
for(i=1;i<=j-1;i++)
{
p=p->next;
}
temp=p->next;
p->next=temp->next;
free(temp);
return 0;
}
int output(linklist L)
{
node* p;
p=L;
if(L->next==NULL )
{
cout<<"链表是空的 !!!";
return 0;
}
while(p->next!=L)
{
p=p->next;
cout<<p->data <<" ";
}
return 0;
}


主函数:
#include"xhlinklist.h"
int main()
{
linklist L;
L=initlinklist();
createlinklist(L);
output(L);
delnode(L);
cout<<"删除后的结果"<<endl;
output(L);
cout<<endl;
return 0;
}



OOPhaisky 2006-10-20
  • 打赏
  • 举报
回复
循环链表删除节点
--------------------------------------------
指针操作而已,前后连接,删除当前节点即可。
austre 2006-10-20
  • 打赏
  • 举报
回复
我觉得没有这么的复杂,等一下我写一个给你
突击召唤师 2006-10-20
  • 打赏
  • 举报
回复
我觉得无非这几步:
把要删的点拿出来
找到要删的点的前序节点,让他指向要删的点的后序节点。这里有可能就剩一个节点了 :) 要考虑这个问题。
把那个被判死刑的节点给执行了。
Over
taodm 2006-10-20
  • 打赏
  • 举报
回复
为啥不用C++的stl的list?

64,645

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧