zoukankan      html  css  js  c++  java
  • 单链表逆转

    参照:http://www.cnblogs.com/bluestorm/p/3167424.html

    getche()接收换行时会解析成‘ ’

    #include <stdio.h>
    #include <stdlib.h>
    struct list{
        char data;
        struct list *next;
    }node;
    struct list* input()
    {
        //p作为新结点,q不断连接新结点,h作为首结点返回
        struct list *p,*q,*h = NULL;
        while(1)
        {
            //新创建一个结点
            p = (struct list*)malloc(sizeof(node));
            scanf("%c",&p->data);
            p->next = NULL;
            if(p->data == '
    ')//此处不为'
    '
                break;
            if(h == NULL)
            {
                h = q = p;
            }
            else{
                q->next = p;
                q = p;
            }
        }
        return h;
    }
    void display(struct list* pfirst)
    {
        struct list *p = pfirst;
        while(p)
        {
            putchar(p->data);
            p = p->next;
        }
        puts("");
    }
    //1借助辅助空间
    //建立临时的新链表,将新结点指向其前驱结点实现逆转
    //struct list* reverse(struct list* Afirst)
    //{
    //    struct list *p,*h = NULL,*first = Afirst;
    //    while(first)
    //    {
    //        p = (struct list*)malloc(sizeof(node));
    //        p->data = first->data;
    //        if(h == NULL)//第一个结点
    //        {
    //            h = p;
    //            h->next = NULL;
    //        }
    //        else{
    //            p->next = h;
    //            h = p;
    //        }
    //        first = first->next;
    //    }
    //    return h;
    //}
    //2.头尾互换,指针指向反转
    struct list* reverse(struct list* Afirst)
    {
        struct list *p,*q,*h,*listen;
        p = listen = Afirst;
        q = NULL;
        //使listen指向最后一个结点
        while(listen->next)
            listen = listen->next;
        //p所指的结点始终串接在listen后面,q所指的结点则接在p后面,h则记住p在串接前的下一个结点
        while(p != listen)
        {
            h = p->next;
            listen->next = p;
            if(q == NULL)
            {
                q = p;
                q->next = NULL;
            }
            else{
                p->next = q;        
                q = p;
            }
            p = h;
        }
        return listen;
    }
    int main()
    {
        struct list *Afirst,*Bfirst;
        Afirst = input();
        puts("逆转前:");
        display(Afirst);
        Bfirst = reverse(Afirst);
        puts("逆转后:");
        display(Bfirst);
        return 0;
    
    }
  • 相关阅读:
    项目成本管理控制成本
    项目成本管理制定预算
    完工尚需绩效指数 TCPI
    第八章 项目质量管理
    第七章:项目成本管理
    项目时间管理制定进度计划
    PV EV AC BAC EAC ETC等计算公式
    项目时间管理控制进度
    淘小宝相册图片批量下载工具
    WebBrowser.Navigate异步运行,使其与其他进程同步的方法
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/5180486.html
Copyright © 2011-2022 走看看