v2版爲非健全版本,很明顯不能再最前端插入。
前端
int sll_insert_v2(Node *current, int value) { Node *prev; Node *newNode; while (current != NULL && current->value >= value) { prev = current; current = current->next; } newNode = malloc(sizeof(Node)); if (newNode == NULL) { return FALSE; } newNode->value = value; if (prev == NULL) { newNode->next = current->next; current->next = newNode; } else { newNode->next = current; prev->next = newNode; } return TRUE; }
v3版本實現了插入功能,可是很明顯就是,其實全部的插入都是:指針
新節點鏈向當前節點的下一 節點code
當前節點鏈向新節點class
因此有了第三版本咱們須要的就是當前節點 和 指向當前節點link 的一個指針next
int sll_insert_v3(Node **rootp, int value) { Node *newNode; Node *current; Node *prev; current = *rootp; while (current != NULL && current->value >= value) { prev = current; current= current->next; } newNode = malloc(sizeof(Node)); newNode->value = value; newNode->next = current; if (prev == NULL) { *rootp = newNode; } else { prev->next = newNode; } return TRUE; }
v4版本:current爲當前版本, rootp爲指向當前節點的link 的指針while
int sll_insert_v4(Node **rootp, int value) { Node *newNode; Node *current; while ((current = *rootp) != NULL && current->value >= value) { rootp = ¤t->next; } newNode = malloc(sizeof(Node)); newNode->value = value; newNode->next = current->next; *rootp = newNode; return TRUE; }