zoukankan      html  css  js  c++  java
  • 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环

    // 建立一个带附加头结点的单链表/测长/打印
    #include<iostream>
    using namespace std;

    typedef struct node
    {
     int data;
     node *next;
    }LinkList;

    LinkList *creat()
    {
     LinkList *head,*p,*s;
     int x;
     head=new LinkList[sizeof(LinkList)];
     head->data=0;
     p=head;
     while(1)
     {
      cout<<"Please input the data:"<<endl;
      cin>>x;
      
      if(x==0) break;
      
      s=new LinkList[sizeof(LinkList)];
      s->data=x;
      p->next=s;
      p=s;
     }
        p->next=NULL;
     return head;
    }

    int length(LinkList *head)
    {
     int n=0;
     LinkList *p;
     p=head->next;
     while(p!=NULL)
     {
      p=p->next;
      n++;
     }
     return n;
    }

    void print(LinkList *head)
    {
     LinkList*p;
        p=head->next;
     while(p!=NULL)
     {
      cout<<p->data<<" ";
      p=p->next;
     }
     cout<<endl;
    }

    /*LinkList *del(LinkList *head,int deldata)
    {
     LinkList *p1,*p2;
     p1=head;
     while(deldata != p1->data && p1->next != NULL)
     {
      p2=p1;
      p1=p1->next;
     }
     if(deldata==p1->data)
     {
      if(p1==head)
      {
       head=p1->next;
       free(p1);
      }
      else
       p2->next=p1->next;
     }
     else
      cout<<deldata<<"could not been found"<<endl;
     return head;
    }*/
    LinkList *del(LinkList *head,int deldata)
    {
     LinkList *p1,*p2;
     p1=head;
     while(p1->next !=NULL)
     {
      p2=p1;
      p1=p1->next;
      if(deldata==p1->data)
      {
       p2->next=p1->next;
       break;
      }
     }
     if(p1->next ==NULL)
      cout<<deldata<<" could not been found"<<endl;
     return head;
    }


    LinkList *insert(LinkList *head,int num)
    {
     LinkList *p0,*p1,*p2;
     p1=head;
     p0=new LinkList[sizeof(LinkList)];
     p0->data=num;
     while(p1->next != NULL)
     {
      p2=p1;
      p1=p1->next;
      if(p0->data<p1->data)
      {
       p2->next=p0;
       p0->next=p1;
       break;
      }
      if(p0->data==p1->data)
      {
       cout<<"yao cha ru de yuan su yi jing cun zai"<<endl;
       break;
      }
     }
     if(p0->data>p1->data)
     {
      p1->next=p0;
      p0->next=NULL;
     }
     
     return head;
    }

    LinkList *Reverse(LinkList *head)
    {
     LinkList *p1,*p2,*p3;
     if(head==NULL||head->next==NULL)
      return head;
     p1=head;
     p2=p1->next;
     p3=p2->next;
     p1->next=NULL;
     while(p3)
     {
      p2->next=p1;
      p1=p2;
      p2=p3;
      p3=p3->next;
     }
     p2->next=p1;
     head=p2;
     return head;

    }

    LinkList* searchmid(LinkList* head)
    {
     LinkList* mid=new LinkList[sizeof(LinkList)];
     LinkList *p1=head->next;
     LinkList *p2=p1;

     while(p1->next != NULL && p1->next->next != NULL  )
     {
      p1=p1->next->next;
      p2=p2->next;
     
     }
     mid=p2;
     return mid;
    }

    LinkList* finddaoshuk(LinkList* head,int k)
    {
     LinkList *p1=head->next;
     LinkList *p2=p1;
     for(int i=1;i<k;i++)
     {
      if(p1->next!=NULL)
       p1=p1->next;
      else return NULL;
     }
     while(p1->next!=NULL)
     {
      p1=p1->next;
      p2=p2->next;
     }
     return p2;
    }

    bool IsCircle(LinkList* head)
    {
     LinkList *p1=head->next;
     LinkList *p2=p1;
     while(p1->next != NULL && p1->next->next != NULL  )
     {
      p1=p1->next->next;
      p2=p2->next;
      if(p2==p1) return true;
     }
     return false;
    }

    int main()
    {
     LinkList*node=creat();
     //cout<<length(node)<<endl;
     print(node);
     bool IsCir=IsCircle(node);
     if(IsCir==true) cout<<"The list has circle"<<endl;
     else cout<<"The list has not circle"<<endl;

     /*LinkList* mid=searchmid(node);
     cout<<mid->data<<endl;
     cout<<"Please output dao shu di k ge jie dian"<<endl;
     int k=2;
        LinkList* pk=finddaoshuk(node,k);
     if(pk==NULL) cout<<k<<" k is biger than the lengh of node";
     else cout<<pk->data<<endl;*/

    /* LinkList*afterdel=del(node,3);
     print(afterdel);
     LinkList*afterinsert=insert(node,10);
     print(afterinsert);

     cout<<"after reverse LinkList"<<endl;
     LinkList*afterreverse=Reverse(afterinsert);
     print(afterreverse);*/

     return 0;
    }

  • 相关阅读:
    【自用】【做题日记6】CTFHUB-文件上传
    【自用】【做题日记5】CTFHUB-XSS
    【自用】【做题日记4】CTFHUB-SQL注入
    【自用】【做题日记3】CTFHUB-密码口令
    【自用】【做题日记2】CTFHUB-信息泄露
    【自用】【做题日记1】CTFHUB-web前置技能
    前端-常用正则表达式
    ClashX 配置代理白名单
    http 网址 URL 特殊字符转义编码
    axios的post和request请求方法
  • 原文地址:https://www.cnblogs.com/fuyanan/p/3353876.html
Copyright © 2011-2022 走看看