我思故我在系列—数据结构面试NO.24(题目搜集整理者JULY,非常感谢!!)

第24题:
1.反转链表
2.合并链表。

#include<stdio.h>

#include<stdlib.h>
#include<assert.h>
typedef struct SListNode
{
    int data;
    struct SListNode *next;
}Lnode,*Slinklist;

Slinklist Createlink()
{
            int input;
       Slinklist Head=NULL;
       Slinklist pcur=NULL;
       Slinklist qend=NULL;
       Head=( Slinklist)malloc(sizeof(Lnode));//申请空间
       Head->next=NULL;
       printf("please input data:");
       scanf("%d",&input);
       while(input!=0)
       {

           pcur=( Slinklist)malloc(sizeof(Lnode));//申请空间
           pcur->data=input;
           pcur->next=NULL;
           if(Head->next==NULL)
           {
               Head->next=pcur;
           }
           else
           {
               qend->next=pcur;
           }
           qend=pcur;
           printf("please input data:");
           scanf("%d",&input);
       }
       return Head;
}
Slinklist Reversion(Slinklist H)
{
    assert(H!=NULL);
  Slinklist p=H->next,q;
  H->next=NULL;
  while(p!=NULL)
   {
      q=p;                   //q指针插入
      p=p->next;
      q->next=H->next;
      H->next=q;
   }
  return H;
}

Slinklist Combine(Slinklist H1,Slinklist H2)/*H1的尾结点连接H2->next.并且释放,H2的头指针*/
{
    Slinklist H=H1;
    while(H->next!=NULL)
    {
        H=H->next;
    }
    H->next=H2->next;
    free(H2);
    H2=NULL;
    return H1;
}

void display(Slinklist H)
{
    assert(H!=NULL);
    Slinklist cur=H->next;
    while(cur!=NULL)
    {
        printf("%d,",cur->data);
        cur=cur->next;
    }
}

void free_sLink(Slinklist Head)
{
    Slinklist cur=Head;
    while(cur->next !=NULL )
    {
        cur=Head;
        Head=Head->next;
        free(cur);
        cur=NULL;
    }
    free(Head);
    Head=NULL;
}

int main(int argc,char* argv[])
{
    Slinklist H0;
    Slinklist H00;
    H0=Createlink();
    display(H0);
    printf("\n");
 H00=Createlink();
 display(H00);
 printf("\n");
 Reversion(H0);
 display(H0);
 printf("\n");
 H0=Combine(H0,H00);
 display(H0);
    return 1;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值