J: 逆序建立链表(线性表)

Home Web Board ProblemSet Standing Status Statistics
OJ系统新功能测试中,如有问题请联系 17865569030 17865569180 17865571035 尽量不要在上课时间打电话

Problem J: 逆序建立链表(线性表)

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 231   Solved: 115
[ Submit][ Status][ Web Board]

Description

本题只需要提交填写部分的代码

(线性表)逆序建立一个链表,带头结点

代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct number  //定义结构体,NUM为结构体变量名
{
    int date;
    struct number *link;  //指向下一个结点的指针
    struct number *before;//指向结点前驱的指针
}NUM;
void destroy( NUM *head)
{
  NUM *p;
 while(head!=NULL)
 {
  p=head->link;
  delete(head);
  head=p;
 }
}
NUM *creat(int n)
{
    NUM *p,*q,*head;
    head=p=q=(NUM*)malloc(sizeof(NUM));//分别开辟一块内存空间给head,p,q
    head->before=NULL;  //head为头,令head的前驱为NULL
    scanf("%d",&p->date);
    while(--n)  //尾插建表,同时记录每个结点的前驱
    {
        p=(NUM*)malloc(sizeof(NUM));//新建p结点,插入q节点后,不仅要让q的link指向p,还要记录q是p的前驱
        scanf("%d",&p->date);
        /***********/

         添加代码

      /*************/    }
    q->link=NULL;
    return q;
}
void play(NUM *h)
{
    NUM *p;
    for(p=h;p!=NULL;p=p->before)//从后往前倒着输出
        printf("%d ",p->date);
 destroy(p);
}
int main()
{
    int n;
    scanf("%d",&n);
    play(creat(n));
    return 0;
}

Input

输入链表长度n:5

输入数据:1 2 3 4 5

Output

5 4 3 2 1

Sample Input

6
10 2 9 7 8 8

Sample Output

8 8 7 9 2 10 

HINT

[ Submit][ Status][ Web Board]

代码

#include <stdio.h>
#include <stdlib.h>
typedef struct number  //定义结构体,NUM为结构体变量名
{
    int date;
    struct number *link;  //指向下一个结点的指针
    struct number *before;//指向结点前驱的指针
}NUM;
NUM *creat(int n)
{
    NUM *p,*q,*head;
    head=p=q=(NUM*)malloc(sizeof(NUM));//分别开辟一块内存空间给head,p,q
    head->before=NULL;  //head为头,令head的前驱为NULL
    scanf("%d",&p->date);
    while(--n)  //尾插建表,同时记录每个结点的前驱
    {
        p=(NUM*)malloc(sizeof(NUM));//新建p结点,插入q节点后,不仅要让q的next指向p,还要记录q是p的前驱
        scanf("%d",&p->date);   
       q->link =p ;
       p->before =q ;
       q= p ;
      
       
    }
    q->link=NULL;
    return q;
}
void play(NUM *h)
{
    NUM *p;
    for(p=h;p!=NULL;p=p->before)//从后往前倒着输出
        printf("%d ",p->date);
}
int main()
{
    int n;
    scanf("%d",&n);
    play(creat(n));
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41661809/article/details/80821801