zoukankan      html  css  js  c++  java
  • 反转一个单链表,分别以迭代和递归的形式来实现

    迭代法:

     1 // 反转单链表.cpp : 定义控制台应用程序的入口点。
     2 
     3 #include "stdafx.h"
     4 #include <stdlib.h>
     5 
     6 typedef struct node
     7 {
     8     int data;
     9     struct node *next;
    10 }linknode,*linklist;
    11 
    12 linknode *reverse(linknode *head)//带有头结点的单链表迭代反转,非递归方法
    13                                  //思路:将当前结点的next指向前驱;当前结点指向next
    14 {
    15     if(head==NULL)
    16         return 0;
    17     linknode *pre,*cur,*ne;//pre 前驱结点指针;cru当前结点指针;ne后继指针
    18     pre=head;
    19     cur=head->next;
    20     while(cur!=NULL)
    21     {
    22         ne=cur->next;
    23         cur->next=pre;
    24         pre=cur;
    25         cur=ne;
    26     }
    27     linknode *q;
    28     q=head->next;
    29     q->next=NULL;
    30     head->next=pre;
    31     return head;
    32 }
    33 
    34 void printLinkList_H(linklist L) //打印
    35 {
    36     linklist p;
    37     p=L->next;
    38     while(p)
    39     {
    40         printf("%4d", p->data);
    41         p = p->next;
    42     }
    43     printf("\n");
    44 }
    45 
    46 void main()
    47 {
    48     int i;
    49     linklist L = (linklist)malloc(sizeof(linknode));
    50     L->next = NULL; //头结点
    51     for(i = 1;i<=5;i++)//新建一个带头结点的单链表
    52     {
    53         linklist p = (linklist)malloc(sizeof(linknode));
    54         p->data = i;
    55         p->next = L->next;
    56         L->next = p;
    57     }
    58     printLinkList_H(L);
    59     reverse(L);
    60     printLinkList_H(L);
    61 }

    递归法:

     1 // 反转单链表.cpp  递归法
     2 
     3 #include "stdafx.h"
     4 #include <stdlib.h>
     5 
     6 typedef struct node
     7 {
     8     int data;
     9     struct node *next;
    10 }linknode,*linklist;
    11 
    12 
    13 linknode *RecReverseList(linknode *head)
    14 {
    15    if (head==NULL)  
    16        return 0;
    17    linknode *curr , *reverse_head , *temp;
    18    if(head->next==NULL)
    19        return head;
    20    else 
    21    {
    22         curr=head;
    23         temp=head->next;
    24         reverse_head=RecReverseList(temp);
    25    }
    26     temp->next=curr;
    27     curr->next=NULL;
    28     return reverse_head;
    29 }
    30 
    31 void printLinkList_H(linklist L) //打印
    32 {
    33     linklist p;
    34     p=L->next;
    35     while(p)
    36     {
    37         printf("%4d", p->data);
    38         p = p->next;
    39     }
    40     printf("\n");
    41 }
    42 
    43 
    44 void main()
    45 {
    46     int i;
    47     linklist L = (linklist)malloc(sizeof(linknode));
    48     L->next = NULL; //头结点
    49     for(i = 1;i<=5;i++)//新建一个带头结点的单链表
    50     {
    51         linklist p = (linklist)malloc(sizeof(linknode));
    52         p->data = i;
    53         p->next = L->next;
    54         L->next = p;
    55     }
    56     printLinkList_H(L);
    57     linklist q;
    58     q=RecReverseList(L->next);
    59     while(q)
    60     {
    61         printf("%4d", q->data);
    62         q = q->next;
    63     }
    64 }
  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/xingele0917/p/2711641.html
Copyright © 2011-2022 走看看