列表

详情


93. 手写代码:循环链表插入元素

回答思路

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>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>next; } ret = current->next; } return ret; }</pos></pos>

上一题