自学内容网 自学内容网

【链表尾插法】求链表中第n个数据的值

题目描述

根据输入数据创建链表,并输出指定位置的数据

如果输入位置不存在,则输出“位置有误”

注意:要求用尾插法,头插法创建之后求的结果是肯定是错误的

输入

第一行输入一个整数n
第二行输入n个整数
第三行输入一个整数p

输出

第p个数据的值

#include "stdio.h"
#include "stdlib.h"

struct node{
    int data;
    struct node *next;
};

void destroylink(struct node *h);   
struct node * createlink(int n);
struct node * findbypos(struct node *h,int pos);

main()
{
    struct node *p,*head=NULL;
    int n,d;
    scanf("%d",&n);
    head = createlink(n);
    scanf("%d",&d);
    p = findbypos(head,d);
    //输出结果
    if (p == NULL) {
        printf("位置有误");
    } else {
        printf("%d", p->data);
    }

    destroylink(head);  
}

struct node * createlink(int n) {
    struct node *head = NULL;
    struct node *tail = NULL;
    int data;
    for (int i = 0; i < n; i++) {
        scanf("%d", &data);
        struct node *newNode = (struct node *)malloc(sizeof(struct node));
        newNode->data = data;
        newNode->next = NULL;
        if (head == NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
    }
    return head;
}

struct node * findbypos(struct node *h,int pos) {
    struct node *current = h;
    int count = 1;
    while (current!= NULL) {
        if (count == pos) {
            return current;
        }
        current = current->next;
        count++;
    }
    return NULL;
}

void destroylink(struct node *h)
{
    struct node *q;
    while(h!=NULL)
    {
        q=h;
        h=h->next;
        free(q);
    }
}


原文地址:https://blog.csdn.net/2302_80782671/article/details/142470023

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!