学习总结 12.16

      今日学习了链表的高级一点的操作,比如像把链表的尾指针挂到我想要的地方。然后对链表的排序什么的。具体就让我们来看一下题目吧。

 

 这个题的意思是要一个双向链表。但是我当时并没有学习双向链表,于是我把一个链表的尾指针,挂在了它本身的头指针,形成了一个循环。操作是下方的代码。

 LinkList coalition(LinkList L1){
     
	Node * temp;
     
         for(temp=L1;temp->next!=NULL;temp=temp->next);  
         temp->next=L1;  
         return L1;
     
 }

 然后就是我要进行的插入操作和删除操作。

 for(b=l->next;b!=NULL;b=b->next){
              		if(l1==b){
				  							  	break;
				  							  }
			  	if(i==d-1){
				   l2=b->next;
				   b1=l2->next;
				   b->next=b1;
				   
				   
				  } if(i==1){
				  	l1=b;
				  }
				  i++;
				  
			  }
 for(b=l->next;b!=NULL;b=b->next){
			                		if(l3==b){
			  				  							  	break;
			  				  							  }
			  			   if(i==e-1){
			  				      s->next=b->next;
			  				      b->next=s;
								   
			  				    
			  				  }if(i==1){
			  				  	l3=b;
			  				  }
			  				  i++;
			  				  
			  			  }

这都是单链表的基本操作。我是用了一个int变量来记录位置。

然后是一个记录位置并从一个我输入的位置开始输出。

 for(b=l->next;b!=NULL;b=b->next){
			  			if(i>=g){
			  				if(m==b){
							  	break;
							  }if(b->node!=0){
						  	printf("%d ",b->node);}
						  }if(i==g){
						  	m=b;
						  }  i++;  
			  			  }
           
           

接下来是完整的代码。

 #include<stdio.h>
 #include<malloc.h>
 typedef struct a{
   int node;
   struct a *next;
 }*LinkList,Node;
 void CerateListTail(LinkList *L,int n) 
  {
      LinkList p,r;
      int i;
      *L=(LinkList)malloc(sizeof(Node));
      r=*L;
      for(i=0;i<n;i++)
      {
          p=(LinkList)malloc(sizeof(Node));
          scanf("%d",&(p->node));
          r->next=p;
          r=p;
      }
      r->next=NULL;
  }
  
 
 
 LinkList coalition(LinkList L1){
     
	Node * temp;
     
         for(temp=L1;temp->next!=NULL;temp=temp->next);  
         temp->next=L1;  
         return L1;
     
 }
 
   int main()
   {
       LinkList a,b,l,s,m,l1,l2,b1,l3;
        s=(LinkList)malloc(sizeof(Node));
        
       int T;
       int i=1;
       char c ;
       int d,e,f,g;
  	  scanf("%d",&T);
              CerateListTail(&a,T);  
			  scanf("%c",&c);
			  scanf("%d",&d);
			  scanf("%d %d",&e,&f);
			  s->node=f;
			  scanf("%d",&g);
              l=a;
              a=a->next;
              coalition(a);
              for(b=l->next;b!=NULL;b=b->next){
              		if(l1==b){
				  							  	break;
				  							  }
			  	if(i==d-1){
				   l2=b->next;
				   b1=l2->next;
				   b->next=b1;
				   
				   
				  } if(i==1){
				  	l1=b;
				  }
				  i++;
				  
			  }
			  i=1;
			   for(b=l->next;b!=NULL;b=b->next){
			                		if(l3==b){
			  				  							  	break;
			  				  							  }
			  			   if(i==e-1){
			  				      s->next=b->next;
			  				      b->next=s;
								   
			  				    
			  				  }if(i==1){
			  				  	l3=b;
			  				  }
			  				  i++;
			  				  
			  			  }
			  i=1;
			   for(b=l->next;b!=NULL;b=b->next){
			  			if(i>=g){
			  				if(m==b){
							  	break;
							  }if(b->node!=0){
						  	printf("%d ",b->node);}
						  }if(i==g){
						  	m=b;
						  }  i++;  
			  			  }
           
           
          return 0;
       
   }

今天的学习就是以上这些内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值