【链表尾插法】求链表中第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)!