• 将一个链表按逆序排列,即将链头当链尾,链尾当链头


    #include <stdio.h>
    #include 
    <stdlib.h>
    #define N 10
    typedef 
    struct student
    {
        
    int num;
        
    float score;
        
    struct student *next;
    }STU;

    STU 
    *create()
    {
        
    int i;
        STU 
    *p,*head=NULL,*tail=head;
        
    for (i=0;i<N;i++)
        {
            p
    =(STU *)malloc(sizeof(STU));
            scanf(
    "%d%f",&p->num,&p->score);
            p
    ->next=NULL;
            
    if (p->num<0)
            {
                free(p);
                
    break;
            }
            
    if(head==NULL)
                head
    =p;
            
    else
                tail
    ->next=p;
            tail
    =p;
        }
        
    return head;
    }

    void output(STU *p)
    {
        
    while (p!=NULL)
        {
            printf(
    "%d\t%.2f\n",p->num,p->score);
            p
    =p->next;
        }
    }

    STU 
    *reverse(STU *p)
    {
        STU 
    *p1,*p2,*head;
        p1
    =p2=head=p;
        
    while (p!=NULL)
        {
            p
    =p->next;
            
    if(p1==head)
                p1
    ->next=NULL;
            
    else
                p1
    ->next=p2;
            p2
    =p1;
            p1
    =p;

        }
        head
    =p2;
        
    return head;
    }

    int main(int argc, char *argv[]) 
    {
        STU 
    *a;
        printf(
    "\n请输入链表a的信息,学号小于零时结束输入:格式(学号 成绩)\n");
        a
    =create();
        printf(
    "\n链表a的信息为:\n");
        output(a);
        a
    =reverse(a);
        printf(
    "\n反序链表a的信息为:\n");
        output(a);


        
    return 0;
    }
  • 相关阅读:
    linux_shell_入门
    Linux下安装jdk
    Linux杂记
    Linux常用命令
    Java 性能优化的五大技巧
    Java异常处理的9个最佳实践
    Java面试:投行的15个多线程和并发面试题
    敏捷持续集成详解
    gitlab系列详解
    git系列讲解
  • 原文地址:https://www.cnblogs.com/qixin622/p/1240004.html
Copyright © 2020-2023  润新知