得到单链表的长度:(头结点不计算在内)
int length(LNode *L)
{
int len = 0;
struct LNode *temp = L->next;
while(temp != NULL){
len++;
temp = temp->next;
}
return len;
}
单链表的删除:删除指定结点并返回删除结点的数据
ElemType deleteLNode(LNode *L,int idx)
{
int i = 0;
ElemType ch = '\0';
struct LNode *pre = L; /* 前驱结点 */
struct LNode *cur = L->next; /* 当前结点 */
while(cur!=NULL&&i<idx-1){
pre = cur;
cur = cur->next;
i++;
}
if(NULL==cur||i>idx-1){
return -1;
}
/*delete*/
ch = cur->data;
pre->next = cur->next;
free(cur);
return ch;
}
插入一个元素到第idx个结点之前
int insert(LNode *L,int idx,ElemType ch)
{
int i = 0;
struct LNode *new_node = NULL; /* 新结点 */
struct LNode *cur = L->next; /* 当前结点 */
struct LNode *pre = L; /* 前驱结点 */
while(cur!=NULL&&i<idx-1){
pre = cur;
cur = cur->next;
i++;
}
if(NULL==cur||i>idx-1){
return -1;
}
new_node = (LNode *)malloc(sizeof(LNode));
if(NULL == new_node){
return -1;
}else{
new_node->data = ch;
new_node->next = cur;
pre->next = new_node;
}
return OK;
}