• 链表反转C实现(递归与循环)


      1 //逆转链表http://blog.163.com/lichunliang1988116@126/blog/static/26599443201282083655446/
      2 #include<iostream.h>
      3 #include<stdlib.h>
      4 typedef struct Node
      5 {
      6     int data;
      7     Node *next;
      8 }*Linklist,ListNode;
      9 void initLink(Linklist *head)
     10 {
     11 
     12     Node *node=(Node *)malloc(sizeof(Node));
     13     node->data=0;
     14     node->next=NULL;
     15 
     16    head=&node;
     17    
     18 }
     19 
     20 void addNode(Linklist head,int no)
     21 
     22 {
     23   Node *node=(Node *)malloc(sizeof(Node));
     24   node->data=no;
     25   node->next=NULL;
     26   cout<<"加个数据为"<<no<<endl;
     27   node->next=head->next;
     28   head->next=node;
     29 }
     30 
     31 
     32 void print(Linklist head)
     33 {
     34   Linklist current=head;
     35   while(current!=NULL)
     36   {
     37       cout<<current->data<<" ";
     38       current=current->next;
     39   
     40   
     41   }
     42 cout<<endl;
     43 
     44 }
     45 //recursive  fanhui head function
     46 Linklist recursive2(Linklist head,Linklist &newHead)
     47 {
     48   if(head->next==NULL)
     49   {
     50       newHead=head;
     51      return head;
     52 
     53   }
     54   Node *p1=head;
     55   Node *p2;
     56 
     57   p2=recursive2(p1->next,newHead);
     58 
     59   p2->next=p1;
     60   p1->next=NULL;
     61 
     62 
     63 }
     64 
     65 
     66 
     67 
     68 
     69 
     70  Linklist  reverse1(Linklist head)
     71  {
     72      //if  linklist is a node or null ,we need not inverse the linklist
     73      if(head==NULL||head->next==NULL)
     74      {
     75          return head;
     76      }
     77 
     78      Linklist pre=head;
     79    Node *current=head->next;
     80    Linklist next1=current->next;
     81    //notice that head->next should be null;
     82    head->next=NULL;
     83 
     84    while(next1!=NULL)
     85    {
     86         current->next=pre;
     87         pre=current;
     88 
     89         current=next1;
     90         
     91         
     92         next1=next1->next;
     93     
     94    
     95    }
     96 
     97     current->next=pre;
     98 
     99    return current;
    100      
    101  
    102  
    103  
    104  }
    105 
    106 void main()
    107 {
    108     cout<<"你好"<<endl;
    109     Linklist h=NULL;
    110     h=(Node *)malloc(sizeof(Node));
    111     h->data=1;
    112     h->next=NULL;
    113     
    114     
    115     addNode(h,4);
    116     addNode(h,5);
    117     addNode(h,6);
    118     cout<<"反转前"<<endl;
    119     print(h);
    120     h=reverse1(h);
    121     print(h);
    122     cout<<"revese again"<<endl;
    123     recursive2(h,h);
    124     print(h);
    125 
    126 
    127 }
  • 相关阅读:
    dir 函数
    模块的 __name__
    from..import 语句
    pass
    可变参数
    python 中的一点新知识
    Numpy中的一点小知识
    使用ipython %matplotlib inline
    numpy.random.rand
    Python:numpy中shape和reshape的用法
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3359272.html
Copyright © 2020-2023  润新知