zoukankan      html  css  js  c++  java
  • 反转链表(递归与非递归)

     1 #include<iostream>
     2 using namespace std;
     3 
     4 typedef struct LNode{
     5     int data;
     6     LNode* next;
     7 }LNode;
     8 //非递归方法,
     9 LNode* reverse(LNode* head)
    10 {
    11     if(!head||!head->next)
    12         return head;
    13     LNode *pre,*cur,*next;
    14     pre = head;
    15     cur = head->next;
    16     next = cur->next;
    17     pre->next = NULL;
    18     while(next!=NULL)
    19     {
    20         next = cur->next;
    21         cur->next = pre;
    22         pre = cur;
    23         cur = next; 
    24     }
    25     head = pre;
    26     return head;
    27 }
    28 //递归反转链表
    29 LNode* reverseRecursion(LNode* currnode)
    30 {
    31     if(!currnode->next||!currnode)
    32     {
    33         return currnode;
    34         
    35     }
    36     else{
    37 
    38         LNode* temp = reverseRecursion(currnode->next);
    39         LNode* nextnode = currnode->next;
    40         nextnode->next = currnode;
    41         currnode->next = NULL;
    42         return temp;//返回当前节点
    43     }
    44     
    45 }
    46 //创建链表
    47 LNode* createList(int n)
    48 {
    49     LNode* head, *temp,*pre;
    50     head = NULL;
    51     head = new LNode;
    52     head->data = n;
    53     pre = head;
    54     while(n--)
    55     {
    56         temp = new LNode;
    57         temp->data = n;
    58         pre->next = temp;
    59         pre = temp;
    60     }
    61     pre->next = NULL;
    62     return head;
    63     
    64 }
    65 
    66 int main(){
    67     int n =6;
    68     LNode * list1,*list2,*temp1,*temp2;
    69     list1 = createList(n);//初始链表
    70     temp1 = list1;
    71     while(n--)
    72     {
    73         cout<<"init node data:"<<temp1->data<<endl;
    74         temp1 = temp1->next;
    75     }
    76     cout<<"head node data:"<<list1->data<<endl;
    77     //list2 = reverse(list1);
    78     list2 = reverseRecursion(list1);
    79     n = 6;
    80     temp2 = list2;
    81     while(n--)
    82     {
    83         cout<<"reverse node data:"<<temp2->data<<endl;
    84         temp2 = temp2->next;
    85     }
    86     return 0;
    87 }
  • 相关阅读:
    手机通讯录实现
    leetcode
    android 上手维修设备和推断启动服务
    MVC Code First (代码优先)
    10000阶乘
    telnet发电子邮件
    nodejs显现events.js:72抛出错误
    指针
    脑洞门大开思维工具:六顶思考帽
    C#实现CAD数据转shape或mdb
  • 原文地址:https://www.cnblogs.com/tracylining/p/3962943.html
Copyright © 2011-2022 走看看