第4周 项目3-单链表应用1

来源:互联网 发布:微软词典知乎 编辑:程序博客网 时间:2024/04/29 22:19

问题及代码:

/* *Copyright (c)2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:bigice.cbp *作    者:何大冰*完成日期:2016年9月29日 *版 本 号:v1.0 * *问题描述:设计一个算法,将一个带头结点的数据域依次为a1,a2,…,an(n≥3)的单链表的所有结点逆置,即第一个结            点的数据域变为an,…,最后一个结点的数据域为a1。实现这个算法,并完成测试。 *输入描述:无 *程序输出:整理后的链表 */  #include <stdio.h>#include <malloc.h>#include "linklist.h"void split(LinkList *&L,LinkList *&L1,LinkList *&L2){    LinkList *p=L->next,*q,*r1; //p指向第1个数据节点    L1=L;       //L1利用原来L的头节点    r1=L1;                  //r1始终指向L1的尾节点    L2=(LinkList *)malloc(sizeof(LinkList));    //创建L2的头节点    L2->next=NULL;          //置L2的指针域为NULL    while (p!=NULL)    {        r1->next=p;         //采用尾插法将*p(data值为ai)插入L1中        r1=p;        p=p->next;          //p移向下一个节点(data值为bi)        q=p->next;          //由于头插法修改p的next域,故用q保存*p的后继节点        p->next=L2->next;   //采用头插法将*p插入L2中        L2->next=p;        p=q;                //p重新指向ai+1的节点    }    r1->next=NULL;          //尾节点next置空}int main(){    LinkList *L,*L1,*L2;    int i;    ElemType a[]= {1,2,3,4,5,6,7,8,9,10};    InitList(L);    InitList(L1);    InitList(L2);    for(i=9; i>=0; i--)        ListInsert(L, 1, a[i]);    printf("L:");    DispList(L);    printf("L->L1,L2\n");    split(L,L1,L2);    printf("L1:");    DispList(L1);    printf("L2:");    DispList(L2);    DestroyList(L1);    DestroyList(L2);    return 0;}

运行结果:





知识点总结:

单链表的逆置。




心得体会:体会了单链表的应用,对单链表知识点的掌握更加完善了




0 0