链表简单功能的总结

下面我将通过创建链表,实现链表的增删,打印,对链表进行复习

头文件:

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

typedef struct ListNode

{

int data;

struct ListNode* next;

}SLI;

SLI* create(int x);

void ADDFRONT( SLI** head , int x );

void PRINT( SLI* head );

void ADDTAIL( SLI** head ,int x );

void DELETEFRONT( SLI** head );

void DELETETAIL( SLI** head );

SLI* FIND( SLI* head ,int x );

void ADD_SPECIFICFRONT(SLI** head , SLI* pos ,int x );

void ADD_SPECIFICTAIL(SLI** head , SLI* pos ,int x );

void DELETE_SPECIFIC( SLI** head , SLI* pos );

具体实现的函数:

#include "SList.h"

SLI* create(int x)

{

SLI* pf = (SLI*)malloc(sizeof(SLI));

if( pf == NULL )

{

perror("fail");

exit(1);

}

pf->data = x;

pf->next = NULL;

return pf;

}

void ADDFRONT( SLI** head , int x )

{

SLI* pf = create(x);

if( (*head) == NULL )

*head = pf;

else

{

pf->next = *head;

*head = pf;

}

}

void PRINT( SLI* head )

{

while( head )

{

printf("%d->",head->data);

head = head->next ;

}

printf("NULL\n");

}

SLI* FINDTAIL(SLI** head)

{

SLI* pf = *head;

while( pf->next != NULL )

{

pf = pf->next;

}

return pf;

}

void ADDTAIL( SLI** head ,int x )

{

SLI* pf = create(x);

SLI* tail = NULL;

assert(head);

if( *head == NULL )

{

*head = pf;

}

else

{

tail = FINDTAIL(head);

tail->next = pf;

}

}

void DELETEFRONT( SLI** head )

{

SLI* pf = (*head)->next;

assert(head);

assert(*head);

free(*head);

*head = pf;

}

void DELETETAIL( SLI** head )

{

SLI* pf = *head;

assert(head);

assert(*head);

if( (*head)->next == NULL )

{

return;

}

else

{

while( pf->next->next != NULL )

{

pf = pf->next ;

}

pf->next = NULL;

return;

}

}

void ADD_SPECIFICFRONT(SLI** head , SLI* pos ,int x )

{

SLI* a = *head;

SLI* pf = create(x);

assert(head);

assert(*head);

assert(pos);

if( pos == *head )//相当与头插

{

ADDFRONT( head , x );

return;

}

while( (*head)->next != pos )

{

*head = (*head)->next ;

}

pf->next = (*head)->next ;

(*head)->next = pf;

*head = a;

}

SLI* FIND( SLI* head ,int x )

{

while( head )

{

if(head->data == x)

return head;

head = head->next ;

}

return NULL;

}

void ADD_SPECIFICTAIL(SLI** head , SLI* pos ,int x )

{

SLI* pf = create(x);

if( pos->next == NULL )

{

pos->next = pf;

return;

}

else

{

pf->next = pos->next ;

pos->next = pf;

return;

}

}

void DELETE_SPECIFIC( SLI** head , SLI* pos )

{

SLI* pf = *head;

if( *head == pos )//当pos为首节点

{

*head = (*head)->next ;

free(pf);

pf = NULL;

return;

}

while( pf->next != pos )

{

pf = pf->next;

}

pf->next = pf->next->next ;

}

测试函数:这里可以随意实现

#include "SList.h"

int main()

{

SLI* pf;

SLI* head = NULL;

//ADDFRONT( &head , 1 );

//ADDFRONT( &head , 2 );

//ADDFRONT( &head , 3 );

ADDTAIL( &head ,1);

ADDTAIL( &head ,2);

ADDTAIL( &head ,3);

pf = FIND( head ,1 );

DELETE_SPECIFIC(&head,pf);

//ADD_SPECIFICTAIL(&head , pf ,2 );

PRINT( head );

/*PRINT( head );

DELETETAIL( &head );

DELETEFRONT( &head );

PRINT( head );*/

}

相关推荐
来自远方的老作者6 分钟前
第7章 运算符-7.1 算术运算符
开发语言·数据结构·python·算法·算术运算符
汀、人工智能1 小时前
[特殊字符] 第9课:三数之和
数据结构·算法·数据库架构·图论·bfs·三数之和
汀、人工智能1 小时前
[特殊字符] 第10课:接雨水
数据结构·算法·数据库架构·图论·bfs·接雨水
辰痕~1 小时前
数据结构-第一节课
数据结构
故事和你911 小时前
蓝桥杯-2025年C++B组国赛
开发语言·软件测试·数据结构·c++·算法·职场和发展·蓝桥杯
派大星~课堂1 小时前
【力扣-138. 随机链表的复制 ✨】Python笔记
python·leetcode·链表
cpp_25012 小时前
P10108 [GESP202312 六级] 闯关游戏
数据结构·c++·算法·动态规划·题解·洛谷·gesp六级
Lzh编程小栈2 小时前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
汀、人工智能2 小时前
[特殊字符] 第102课:添加与搜索单词
数据结构·算法·均值算法·前缀树·trie·添加与搜索单词
汀、人工智能2 小时前
07 - 字典dict:哈希表的Python实现
数据结构·算法·数据库架构·哈希表的python实现