尾插法建立单链表后,输出整个链表元素,并输出指定位置元素
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Node {
int num;
struct Node *next;
}Node;
void print(Node L) //输出全部链表元素
{
Node* p=L.next;
while (p!=NULL)
{
printf("%d\n", p->num);
p = p->next;
}
}
Node* Init(int x) //尾插法建立单链表
{
Node *p, *q, *head;
q = (Node*)malloc(sizeof(Node));
q->next = NULL;
head = q;
int i;
for (i = 0; i < x; i++)
{
p = (Node*)malloc(sizeof (Node));
p->next = NULL;
p->num = i;
q->next = p;
q = p;
}
return head;
}
void getItem(Node head, int j)
{
Node *p = head.next;
int i = 1;
while (p&&i < j) //找到第j个位置,当遍历到链表尾或j的值小于1时跳出循环
{
p = p->next;
i++;
}
if (!p || i > j) //判断找到的位置是否正确,表尾或i>j均输出错误
{ //i<j是指输入的位置小于0,即不在链表内
printf("请输入正确的位置,%d该位置不在范围内\n", j);
}
else
{
printf("第%d个位置的数字为%d\n", j, p->num);
}
}
int main()
{
Node *L = (Node*)malloc(sizeof(Node));
L->next = NULL;
L=Init(5);
print(*L);
getItem(*L,0);
getItem(*L, 1);
getItem(*L, 3);
getItem(*L, 10);
return 0;
}