在学习链表的时候我们都接触过单链表插入新结点的问题。其中有一类就是在顺序链表中插入新节点,并保持链表的递增或者递减性质。
最近看《C和指针》一书中提到了一种方法,我个人感觉不错,并且思想非常好。
这是最常见的思维:
//sll_node.h
typedef struct Node
{
int value;
Node *next;
} Node;
#include "sll_node.h"
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
// insertNode:把newValue的值插入到递增排序的链表中,正确返回TRUE,错误返回FALSE
// rootp是链表的头指针。
int insertNode(Node **rootp, int newValue)
{
Node *newNode; // 新节点的指针
Node *previous; // 当前指针的前一个指针
Node *current; // 当前指针
current = *rootp; // 初始化
previous = NULL;
// 查找插入的位置
while (current != NULL && current->value < newValue)
{
previous = current;
current = current->next;
}
// 给新节点分配空间
newNode = (Node *)malloc(sizeof(Node));
if (newNode == NULL)
return FALSE;
newNode->value = newValue;
// 更改新节点的前驱和后继节点
newNode->next