目录
链表删除指定值元素
错误1:两个if间没有用else,导致两个都执行了
#include<stdio.h>
const int N=1005;
int n,first,firstid;
using namespace std;
struct node
{
int data;int next;
} ;
node lnode[N];
void readin()
{
for(int i=0;i<n;i++)
{ int idtemp;scanf("%d",&idtemp);
scanf("%d %d",&lnode[idtemp].data,&lnode[idtemp].next);
}
}
//void deletex(int pre)
//{
// lnode[pre].next=lnode[lnode[pre].next].next;
//}
int main()
{
scanf("%d %d",&n,&firstid);int tgt;
// int itern=first;
scanf("%d",&tgt);
readin();
int pre,cur;cur=firstid;
for(int i=0;i<N;i++)
{if(cur==-1) break;
if(i==0) if(lnode[cur].data==tgt) firstid=lnode[cur].next;
if(lnode[cur].data==tgt )
{lnode[pre].next=lnode[cur].next;
}
pre=cur;cur=lnode[cur].next;
}
// printf("——————");
while(firstid!=-1 )
{
printf("%d %d %d\n",firstid,lnode[firstid].data,lnode[firstid].next);
firstid= lnode[firstid].next;}
}
错误2:以循环次数i=0为判断头结点条件,删除了头结点之后 ,还想删头结点就判断不出来了
应该用cur==firstid
错误3:都要执行的部分放在某个括号里了
#include<stdio.h>
const int N=1005;
int n,first,firstid;
using namespace std;
struct node
{
int data;int next;
} ;
node lnode[N];
void readin()
{
for(int i=0;i<n;i++)
{ int idtemp;scanf("%d",&idtemp);
scanf("%d %d",&lnode[idtemp].data,&lnode[idtemp].next);
}
}
//void deletex(int pre)
//{
// lnode[pre].next=lnode[lnode[pre].next].next;
//}
int main()
{
scanf("%d %d",&n,&firstid);int tgt;
// int itern=first;
scanf("%d",&tgt);
readin();
int pre,cur;cur=firstid;
for(int i=0;i<N;i++)
{if(cur==-1) break;
if(i==0) if(lnode[cur].data==tgt)
{ firstid=lnode[cur].next;
}
else{ if(lnode[cur].data==tgt )
{lnode[pre].next=lnode[cur].next;
}
pre=cur;cur=lnode[cur].next;
}
}
//printf("——————");
while(firstid!=-1 )
{
printf("%d %d %d\n",firstid,lnode[firstid].data,lnode[firstid].next);
firstid= lnode[firstid].next;}
}
准确代码
#include<stdio.h>
const int N=1005;
int n,first,firstid;
using namespace std;
struct node
{
int data;int next;
} ;
node lnode[N];
void readin()
{
for(int i=0;i<n;i++)
{ int idtemp;scanf("%d",&idtemp);
scanf("%d %d",&lnode[idtemp].data,&lnode[idtemp].next);
}
}
//void deletex(int pre)
//{
// lnode[pre].next=lnode[lnode[pre].next].next;
//}
int main()
{
scanf("%d %d",&n,&firstid);int tgt;
// int itern=first;
scanf("%d",&tgt);
readin();
int pre,cur;cur=firstid;
for(int i=0;i<N;i++)
{//printf("%d %d :\n",cur,firstid);
if(cur==-1) break;
if(cur==firstid) if(lnode[cur].data==tgt)
{ firstid=lnode[cur].next;
}
else{ if(lnode[cur].data==tgt )
{lnode[pre].next=lnode[cur].next;
}
}
pre=cur;cur=lnode[cur].next;
}
// printf("——————");
while(firstid!=-1 )
{
printf("%d %d %d\n",firstid,lnode[firstid].data,lnode[firstid].next);
firstid= lnode[firstid].next;}
}
反转链表(静态链表型)
#include<stdio.h>
const int N=1005;
int n,first,firstid;
using namespace std;
struct node
{
int data;int next;
} ;
node lnode[N];
void readin()
{
for(int i=0;i<n;i++)
{ int idtemp;scanf("%d",&idtemp);
scanf("%d %d",&lnode[idtemp].data,&lnode[idtemp].next);
}
}
//void deletex(int pre)
//{
// lnode[pre].next=lnode[lnode[pre].next].next;
//}
int main()
{
scanf("%d %d",&n,&firstid);int tgt;
// int itern=first;
// scanf("%d",&tgt);
readin();
int pre=-1,cur,next;cur=firstid;
while(cur!=-1)
{next=lnode[cur].next;
lnode[cur].next =pre;
pre=cur;
cur=next;
}
firstid=pre;
while(firstid!=-1 )
{
printf("%d %d %d\n",firstid,lnode[firstid].data,lnode[firstid].next);
firstid= lnode[firstid].next;}
}
进阶反转链表:dummy node就是这玩意。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 链表【4】
发表评论 取消回复