手写代码:循环链表插入元素?
发布于 2020-01-27 20:20:01
关注者
0
被浏览
516
1 个回答
-
参考回答:
typedef struct _tag_CircleListNode { struct _tag_CircleListNode * next; }CircleListNode; typedef struct _tag_CircleList { CircleListNode header; CircleListNode* slider; int length; }TCircleList;
//插入元素
int CircleList_insert(CircleList* list, CireListNode* node, int pos) { int ret = 0, i=0; TCircleList* sList = (TCircleList*)list; if (list == NULL || node== NULL || pos<0) { return -1; } CircleListNode* current = (CircleListNode*)sList; for(i=0; (i<pos) && (current->next != NULL); i++) { current = current->next; }
//current->next 0号节点的地址
node->next = current->next; //1 current->next = node; //2
//若第一次插入节点
if( sList->length == 0 ) { sList->slider = node; } sList->length++;
//若头插法 current仍然指向头部
//(原因是:跳0步,没有跳走) 中间第一种情况
if( current == (CircleListNode*)sList ) { //获取最后一个元素 CircleListNode* last = CircleList_Get(sList, sList->length - 1); last->next = current->next; //3 } return ret; } CircleListNode* CircleList_Get(CircleList* list, int pos) // O(n) { TCircleList* sList = (TCircleList*)list; CircleListNode* ret = NULL; int i = 0; if (list==NULL || pos<0) { return NULL; } { CircleListNode* current = (CircleListNode*)sList; for(i=0; i<pos; i++) { current = current->next; } ret = current->next; } return ret; }
推荐阅读
-
如何判断单链表是否是循环链表?
2020-01-31 关注 0 浏览516 1答案
-
双向链表和双向循环链表?
2019-11-24 关注 1 浏览1382 1答案
-
数组和链表插入的时间复杂度?
2022-09-21 关注 0 浏览11 0答案
-
实现双向链表操作,包括创建链表、向链表插入新结点、从链表中删除结点。 ...
2022-03-02 关注 0 浏览28 1答案
-
手写代码:反转链表
2020-01-30 关注 0 浏览371 1答案
-
如何在循环链表中查找循环起始节点?
2022-07-28 关注 0 浏览13 1答案
-
解释如何在循环链表中查找循环起始节点?
2021-01-31 关注 0 浏览79 1答案
-
对于双向循环链表,在p指针所指的结点之后插入q指针所指结点的操作应为:()
2022-03-03 关注 0 浏览41 1答案
-
单循环链表的主要优点是()。
2020-12-25 关注 0 浏览133 1答案
-
手写代码:反转链表 (Java 版)
2020-01-31 关注 0 浏览735 1答案