rsZheng4916 2021-12-16 22:15 采纳率: 60%
浏览 254
已结题

单循环链表获取前驱结点的问题

img

先贴上代码先:

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

typedef struct LNode{
    int data;
    struct LNode *next;
}LNode;

/**
 * @brief Create a List object 尾插法创建单向循环链表,并返回一个指向链表表头的指针
 * @return LNode* 链表表头指针
 */
LNode *createList(){
    LNode *head,*q,*p;
    int elem = 0,len = 0;   // 元素 长度
    // 申请新的内存空间,建立表头结点
    head = (LNode *)malloc(sizeof(LNode));
    q = head;
    printf("Input length of the list: ");
    scanf("%d",&len);       // 单链表结点个数
    head->data = len;       // 表头结点赋值为len,即表中结点个数
    
    // n<=0,建立仅含表头结点的空表
    if(len > 0){
        printf("Input the NodeData: ");
        while(len > 0){
            // 输入新元素,如果输入的是数字,则加入链表
            if(scanf("%d",&elem) == 1){
                p = (LNode *)malloc(sizeof(LNode));
                p->data = elem;
                q->next = p;
                q = p;
                len--;
            }else{
                getchar();  // 清除输入缓冲区中的非数字
            }
        }
        q->next = head;
        return(head);
    }
}

/**
 * @brief 返回结点p的直接前驱结点q
 */
LNode *prior(LNode *p){
    LNode *q;
    q = p->next;
    while(q->next != p)
        q = q->next;
    return(q);
}

/**
 * @brief 释放链表的元素内存
 */
void freeNode(LNode *head){
    LNode *q = head,*p;
    do{
        p = q->next;
        free(q);
        q = p;
    }while(p != head);
    printf("freeNode successful!\n");
}


void display(LNode *head){
    LNode *p = head->next;
    while(p->next->next != p){
        printf("%d ",p->data);
        p = p->next;
        if(p == head)
            break;
    }
    printf("\n");
}

int main(){
    LNode *L,*c,*p;
    int i,j;
    // 建立单向循环链表
    L = createList();
    
    // 给出单向循环链表中的结点序号,表头结点序号为0
    printf("Input NodeNumber: ");
    scanf("%d",&j);     // 0---表中的结点个数
    p = L;
    for(i = 0;i < j;i++)
        p = p->next;    // 按序号确定一个p结点
    c = prior(p);
    printf("Node %d's prior is: %d\n",p->data,c->data);

    freeNode(L);
}

编译运行如下:

img

求问各位兄弟,这里获取前驱结点为什么会出错?

比如我获取第一个结点的前驱,不应该是获得数据9的嘛,为什么还是5,而获取第二个结点6的前驱是5,是正确的,不知道什么问题,特来请教。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月24日
    • 创建了问题 12月16日

    悬赏问题

    • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
    • ¥15 android 集成sentry上报时报错。
    • ¥50 win10链接MySQL
    • ¥35 跳过我的世界插件ip验证
    • ¥15 抖音看过的视频,缓存在哪个文件
    • ¥15 自定义损失函数报输入参数的数目不足
    • ¥15 如果我想学习C大家有是的的资料吗
    • ¥15 根据文件名称对文件进行排序
    • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
    • ¥15 有人会用py或者r画这种图吗