链表的增删改查

链表的创建(两种方法):

头插法:

 

 

 尾插法:

 

 

 

 

 

复制代码
#include <malloc.h>
#include "stdio.h"
typedef struct LNode{
int data; //数据域
struct LNode *next;//指针域
}ListNode;


//头插法创建链表
ListNode* headInsert(ListNode *&node){ //传递指针地址
ListNode *temp;
int input;
//创建头结点
node = (ListNode*)malloc(sizeof(ListNode));
//初始为空链表
node->next = NULL;
printf("insert num you input, end when input num=-1\n");
while(1){
scanf("%d", &input);
if(input == -1)
break;
// printf("insert num you input, end when input num=-1\n");
temp = (LNode*) malloc(sizeof(LNode));
//替换
temp->data = input;
temp->next = node->next;
//覆盖
node->next = temp;
//输入-1结束循环
}
return node;
}

//尾插法创建链表
ListNode* tailInsert(ListNode *&node){
node = (ListNode*)malloc(sizeof(ListNode));
//创建临时结点
ListNode *temp = NULL, *tempNode = node;
int input;
printf("insert num you input, end when input num=-1\n");
while(1){
scanf("%d", &input);
if(input == -1)
break;

temp = (ListNode*)malloc(sizeof(ListNode));
//新建
temp->data = input;
//连接新结点
tempNode->next = temp;
//更新 tempNode 的位置使其指向最新的位置
tempNode = temp;
}
//没有新结点插入, 则下一个结点为 NULL
tempNode->next = NULL;
return node;
}
//查看链表, 遍历链表
void viewList(ListNode *node){
//略去头结点
ListNode* view = node->next;
while(view != NULL){
printf("%d\n", view->data);
view = view->next;
}
}

int main(){
ListNode *node = NULL;
node = (ListNode*)malloc(sizeof(ListNode));
//头插法创建链表
//viewList(headInsert(node));
//尾插法创建链表
viewList(tailInsert(node));
return 0;
}
复制代码

 

posted @   mcFly026  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示