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

问题及代码:

/* 
*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;
}

运行结果:





知识点总结:

单链表的逆置。




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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值