关于单链表的顺序插入与逆序插入,用C语言
题目为:随机生成100个整数,范围在1~999之间,如果第一个随机数为偶数,将这100个随机数按生成次序插入到链表中;如果第一个数为奇数,将这100个数逆序插入到链表中,最后输出整个链表。要求编写两个插入函数(分别叫insert_head和insert_tail)题目给的部分代码:
linkedlist.h
#ifndef _LINKEDLIST_H_
#define _LINKEDLIST_H_
struct Node
{
int element;
struct Node *next;
};
#endif
main3.c(部分代码)
#include <stdio.h>
#include <stdlib.h>
#include "linkedlist.h"
void printlist(struct Node *h)
{
struct Node *p;
p = h->next;
while (p != NULL)
{
printf("%d ", p->element);
p = p->next;
}
printf("\n");
}
int main()
{
struct Node *header;
void (*insert)(struct Node *, int); // insert func pointer
header = malloc(sizeof(struct Node));
header->next = NULL;
/* ---your codes --- */
printlist(header);
}
以及自己写的代码(自己没写出来):
#include <malloc.h>
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
typedef struct node
{
int num;
struct node *next;
}node,*pnode;
/*在链表头进行插入,新节点成为头节点,原头节点成为新节点的下一个节点,头节点指针后伊一位*/
void insert_head(pnode *phead,int data)
{
pnode p;
p=(pnode)malloc(sizeof(sizeof(node)));
if(NULL==p)
{
perror("malloc fail");
exit(1);
}
p->num=data;
p->next=(*phead);
(*phead)=p;
}
/*在链表尾进行插入*/
void insert_tail(pnode *phead,int data)
{
pnode p; // 插入的新结点
pnode p2=(*phead); //链表中的指针初始化,否则会发生段错误
p=(pnode)malloc(sizeof(sizeof(node)));
if(NULL==p)
{
perror("malloc fail");
exit(1);
}
p->next=NULL;
p->num=data;
if(*phead)
{
while(p2->next) //遍历链表,找到鏈表末尾节点
{
p2=p2->next;
}
p2->next=p;
}
}
void printf_list(pnode head)
{
while(head)
{
printf("%d\n",head->num);
head=head->next;
}
printf("\n");
}
void main(void)
{
int a[100];
int i;
srand(time(0));
struct node *head=NULL;
for(i=0;i<2;i++){
a[i]=rand()%100;
insert_head(&head,a[i]);
}
for(i=0;i<2;i++){
a[i]=rand()%100;
insert_tail(&head,a[i]);
}
printf_list(head); //测试打印
}
希望各位大佬指点迷津,最好按题目补充代码。