#include<stdio.h> #include<assert.h> #include<stdlib.h> typedef int DataType; typedef struct SListNode { DataType data; struct SListNode* next; }SListNode; SListNode* BuyNode(DataType x) { SListNode* next = (SListNode*)malloc(sizeof(SListNode)); next->data = x; next->next = NULL; return next; } void PushBack(SListNode* & ppHead, DataType x) { if (ppHead == NULL) { ppHead = BuyNode(x); } else { SListNode* tail = ppHead; while (tail->next != NULL) { tail = tail->next; } tail->next = BuyNode(x); } } void PrintSNodeList(SListNode* ppHead) { while (ppHead) { printf("%d->", ppHead->data); ppHead = ppHead->next; } printf("\n"); } //在无头单链表的一个非头节点前插入一个节点 void InsertFront(SListNode* & ppHead, SListNode* pos,DataType x) { assert(ppHead); SListNode* ppHeadName = ppHead; while (ppHeadName != pos) { ppHeadName = ppHeadName->next; } if (ppHeadName == NULL) { return; } SListNode* cur = BuyNode(x); cur->next = pos->next; pos->next = cur; cur->data = x; DataType tmp = cur->data; cur->data = pos->data; pos->data = tmp; } void Test3() { SListNode* List = NULL; PushBack(List, 1); PushBack(List, 2); PushBack(List, 3); PushBack(List, 4); PushBack(List, 5); PrintSNodeList(List); InsertFront(List, List->next->next, 10); PrintSNodeList(List); } int main() { Test3(); system("pause"); return 0; }
C语言:【单链表】在无头单链表的一个非头节点前插入一个节点
原创
©著作权归作者所有:来自51CTO博客作者韩静静的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
4.带头节点的双链表的实现(C语言)
双链表基本运算的代码实现,前插、后插操作
双链表 头结点 插入操作 删除操作 -
【LeetCode】2192. 有向无环图中一个节点的所有祖先
【LeetCode】2192. 有向无环图中一个节点的所有祖先
leetcode 数据结构与算法 C++ -
C语言一个单链表的实现
-- 所谓链表记住一句即可:地址不连续,大家只是握个手而已; list0.c list.c list.h main.c --
链表 数据项 i++ #include 数据