#include <stdio.h>
#include <stdlib.h>
#define FALSE 0
#define TRUE 1
typedef struct NODE
{
struct Node * link;
int value;
}Node;
//头指针
Node *root = NULL;
//创建链表
Node *createNode(){
int num = 5;
int i = 0;
Node *head = NULL;
Node *current = NULL;
Node *previous = NULL;
//自己写的
// for(;i < num; i++){
// if(0 == i){
// current = (Node *)malloc(sizeof(Node));
// if(current != NULL){
// head = current;
// head->value = i * 2;
// }
// }
// else{
// if(i == num - 1){
// current ->link = NULL;
// }
// previous = current;
// current = (Node *)malloc(sizeof(Node));
// if(current != NULL){
// previous->link = current;
// current->value = i * 2;
// }
// }
// }
//第二种方法
head = (Node *)malloc(sizeof(Node));
if(head == NULL){
printf("error\n");
exit(1);
}
Node *pTail = head;
pTail -> link = NULL;
for(;i < num; i++){
Node *new = (Node *)malloc(sizeof(Node));
if(new == NULL){
printf("error\n");
exit(1);
}
new ->value = i * 2;
printf("I : %d\n",i);
pTail->link = new;
new ->link = NULL;
pTail = new;
}
return head;
}
//遍历链表
void printTheNode(Node *begin){
Node *current = NULL;
current = begin->link;//曾经出错,头结点是没有数据的,所以遍历要从第二个开始
while(current != NULL){
printf("the node is :%d \n",current->value);
current = current->link;
}
}
//插入数值为insertNum的结点
Node *insertMyNum(int insertNum,Node **root){
Node *current ;
Node *previous ;
Node *new ;
current = *root;
previous = NULL;
while(current != NULL && insertNum > current->value ){
//while( insertNum > current->value ¤t != NULL )会出错,因为先计算第一个计算式,而第一个在current为NULL的时候就出错了
previous = current;
current = current ->link;
}
new = (Node *)malloc(sizeof(Node));
if(new ==NULL)
return NULL;
new ->value = insertNum;
if(previous == NULL){
*root = new;
new ->link = current;
}
// if(current->link == NULL){
// current ->link = new;
// new->link - NULL;
// }
else{
previous->link = new;
}
return *root;
}
//主函数
int main()
{
int insertNum = 0;
printf("begin \n");
root = createNode();
printTheNode(root);
printf("end \n");
printf("input the num you want to insert: \n");
scanf(" %d",&insertNum);
root = insertMyNum(insertNum,&root);
// sll_insert(&root,insertNum);
printTheNode(root);
return 1;
}创建单链表
最新推荐文章于 2024-06-11 17:28:20 发布
本文详细介绍了链表的创建、遍历、插入等基本操作,并通过实例展示了如何运用链表解决实际问题,深入探讨了数据结构在编程中的重要应用。
1万+

被折叠的 条评论
为什么被折叠?



