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

  • 相关阅读:
    Spring的PropertyPlaceholderConfigurer
    关于解决java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoader问题
    CentOS7.x安装flash
    C#——list列表复制
    C#——dataGridView控件获取当前鼠标所在的行
    C#——button按钮风格(按下改变)
    C#——chart控件坐标轴刻度细分(副刻度)
    C#——USBHID上位机开发(win10、win7)
    C#——自定义控件工具箱图标
    C#——给线程传递参数的三种方式
  • 原文地址:https://www.cnblogs.com/yym2013/p/3608569.html
Copyright © 2011-2022 走看看