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 }
  • 相关阅读:
    零基础学习python_异常处理(32-33课)
    零基础学习python_pickle(31课)
    零基础学习python_文件(28-30课)
    安全测试3_Web后端知识学习
    安全测试2_Web前端知识学习
    安全测试1_Web知识简介
    659 为什么说服人那么难?(一个理智的人不要总试图改变别人的世界观,应该找机会颠覆自己的世界观)
    总结18,展望19
    typescript 的安装
    MVC4.0 解决Controllers与Areas中控制器不能同名问题
  • 原文地址:https://www.cnblogs.com/xingele0917/p/2711641.html
Copyright © 2011-2022 走看看