你好,请问一下怎么用C语言编写单链表插入节点程序,万分感谢!

2025-03-10 12:40:31
推荐回答(1个)
回答1:

#include "sll_node.h"
#include

#define FALSE 0
#define TRUE 1

// insertNode2:把newValue的值插入到递增排序的链表中,正确返回TRUE,错误返回FALSE
// nextp是指向当前节点的指针,最初是头指针
int insertNode2(Node **nextp, int newValue)
{
Node *newNode; // 新节点指针
Node *current; // 当前节点指针

current = *nextp; // 最初当前节点为nextp指针指向的节点
// 查找新插入节点的位置
while (current != NULL && current->value < newValue)
{
nextp = ¤t->next;
current = current->next;
}

// 为新节点分配内存
newNode = (Node *)malloc(sizeof(Node));
if (newNode == NULL)
return FALSE;
newNode->value = newValue;

// 统一了插入的步骤。即:每次插入,都是前一个指针指向新节点,新节点指向下一个节点
*nextp = newNode;
newNode->next = current;

return TRUE;
}

main函数
[cpp] view plain copy
#include
#include
#include
#include "sll_node.h"

int insertNode(Node **rootp, int newValue);
int insertNode2(Node **nextp, int newValue);

int main()
{
srand(time(0));

Node *head = (Node *)malloc(sizeof(Node));
head->next = NULL;

for (int i = 0; i < 5; i++)
{
int temp = rand() % 50;
printf("%d\n", temp);
//insertNode(&head,temp);
insertNode2(&head,temp);
}

Node *p = head->next;
while (p != NULL)
{
printf("%d\n", p->value);
p = p->next;
}

getchar();
getchar();
return 0;
}