zoukankan      html  css  js  c++  java
  • 《数据结构教程》(李春葆 主编)课后习题【2.4】

    【2.4】

    设计一个算法,将一个带头节点的数据域依次为a1,a2,……,an(n>=3)的单链表的所有节点逆置,即第一个节点的数据域变为an,……,最后一个节点的数据域变为a1。


      思路:我是直接在原链表上操作,当然也可以创建一个数组存储链表的数据,然后再倒序放回原链表。

      答案

     1 void invert(LinkList *&head)    //逆置链表处理 
     2 {
     3     LinkList* p = head->next;
     4     LinkList* pri = NULL;    //之前的节点 
     5     while(p){
     6         LinkList* q = new LinkList;
     7         q->data = p->data;    //把当前节点记录下来 
     8         q->next = pri;
     9         pri = q;
    10         head->next = q;
    11         LinkList* t = p;    //当前节点没用了删除掉 
    12         p=p->next;
    13         delete(t);
    14     }
    15 }

      测试代码

     1 //链表逆置
     2 //思路是遍历原链表,不断将当前节点以头插法插到head头节点后面,以此实现逆置 
     3 
     4 #include <iostream>
     5 using namespace std;
     6 #define Max 10 
     7 struct LinkList{
     8     int data;
     9     LinkList* next;
    10 };
    11 void CreateLinkList(int a[],int n,LinkList* &head)        //创建一个链表,把a数组中的数据依次放进去 
    12 {
    13     LinkList *p = head;
    14     for(int i=0;i<n;i++){
    15         LinkList *q = new LinkList;
    16         q->data = a[i];
    17         q->next = NULL;
    18         p->next = q;
    19         p = q;
    20     }
    21 }
    22 void Display(LinkList *&head)    //输出链表 
    23 {
    24     LinkList *p = head->next;
    25     while(p!=NULL){
    26         cout<<p->data<<' ';
    27         p=p->next;
    28     }
    29     cout<<endl;
    30 }
    31 void invert(LinkList *&head)    //逆置链表处理 
    32 {
    33     LinkList* p = head->next;
    34     LinkList* pri = NULL;    //之前的节点 
    35     while(p){
    36         LinkList* q = new LinkList;
    37         q->data = p->data;    //把当前节点记录下来 
    38         q->next = pri;
    39         pri = q;
    40         head->next = q;
    41         LinkList* t = p;    //当前节点没用了删除掉 
    42         p=p->next;
    43         delete(t);
    44     }
    45 }
    46 int main()
    47 {
    48     int a[Max],n=Max;
    49     for(int i=0;i<Max;i++)
    50         a[i] = i+1;
    51     LinkList *head = new LinkList;
    52     CreateLinkList(a,n,head);    //将数组a中的元素顺序创建成一个链表 
    53     Display(head);    //输出该链表 
    54     invert(head);    //将该链表逆置处理 
    55     Display(head);    //输出处理后的链表 
    56     return 0;
    57 }

    Freecode : www.cnblogs.com/yym2013

  • 相关阅读:
    SVN: repository browser 库浏览器
    创业泡沫真他妈的大出血来了 --个人需要创业以谋生,行业需要创业以求变,国家需要创业以维稳
    判断输入的是否是大于0的正整数
    linux开放或限制端口和ip访问
    linux模糊删除es索引脚本
    ssh免密登录
    DES加密解密
    SpringBoot 单元测试
    SpringContextHolder 工具类
    fiddler抓包 443 请求不到数据
  • 原文地址:https://www.cnblogs.com/yym2013/p/3608569.html
Copyright © 2011-2022 走看看