略懂c语言 2022-04-19 11:27 采纳率: 92.6%
浏览 46
已结题

如何将顺序表改为逆序表

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node{ int data; int len; struct Node *pNext;}NODE,*PNODE;
PNODE creat_list(int len)//创建链表, {
int i; int val;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (NULL == pHead){
printf("分配失败, 程序终止!\n"); exit(-1);} PNODE pTail = pHead;
pTail->pNext = NULL;
for (i=0; i<len; ++i){scanf("%d", &val); PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (NULL == pNew) { printf("分配失败, 程序终止!\n"); exit(-1);} pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew; }return pHead;}
void traverse_list(PNODE pHead,int len)//遍历链表{ PNODE p = pHead->pNext; int count=1; while(NULL!=p){
if(count==len) { printf("%d",p->data); } else { printf("%d ",p->data); } p = p->pNext; count++; } printf("\n"); return;}
int main(){ int len; while(~scanf("%d",&len)) { PNODE pHead=NULL;//等价于struct Node *pHead= NULL //创建链表creat_list2(); pHead=creat_list(len);//创建一个非循环单链表,并将其该链表的头结点指向PHead traverse_list(pHead,len);//遍历整个链表 free(pHead); } return 0;}

  • 写回答

3条回答 默认 最新

  • qfl_sdu 2022-04-19 11:53
    关注

    运行结果及代码如下:

    img

    代码:

    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    typedef struct Node
    {
        int data;
        int len;
        struct Node* pNext;
    }NODE, * PNODE;
    PNODE creat_list(int len)//创建链表, 
    {
        int i; int val;
        PNODE pHead = (PNODE)malloc(sizeof(NODE));
        if (NULL == pHead) {
            printf("分配失败, 程序终止!\n"); exit(-1);
        }
        PNODE pTail = pHead;
        pTail->pNext = NULL;
        for (i = 0; i < len; ++i) 
        {
            scanf("%d", &val);
            PNODE pNew = (PNODE)malloc(sizeof(NODE));
            if (NULL == pNew) { printf("分配失败, 程序终止!\n"); exit(-1); }
            pNew->data = val;
            pTail->pNext = pNew;
            pNew->pNext = NULL;
            pTail = pNew;
        }
        return pHead;
    }
    void traverse_list(PNODE pHead, int len)//遍历链表
    {
        PNODE p = pHead->pNext;
        int count = 1;
        while (NULL != p)
        {
            if (count == len)
            {
                printf("%d", p->data);
            }
            else
            {
                printf("%d ", p->data);
            }
            p = p->pNext;
            count++;
        }
        printf("\n");
        return;
    }
    
    
    //逆序
    void reverse(PNODE pHead)
    {
        PNODE p,  t,q;
        p = pHead->pNext;
        if (p == 0 || p->pNext == 0) return;
    
        t = p->pNext;
        p->pNext = 0; 
    
        while (t)
        {
            pHead->pNext = t;
            
            q = t->pNext;
            t->pNext = p;
            p = t;
            t = q;
        }
    }
    
    
    int main() {
        int len;
        while (~scanf("%d", &len))
        {
            PNODE pHead = NULL;//等价于struct Node *pHead= NULL 
            //创建链表creat_list2(); 
            pHead = creat_list(len);//创建一个非循环单链表,并将其该链表的头结点指向PHead 
            traverse_list(pHead, len);//遍历整个链表 
    
            //逆序
            printf("\n逆序后:");
            reverse(pHead);
            traverse_list(pHead, len);//遍历整个链表 
            free(pHead);
        }
        return 0;
    }
    
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月19日

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本