上面介绍了,在一个节点之后插入节点的情况。这是通常的情况。如果要向一个链表的头部插入节点,就只需要将新节点的下一个指针指向链表的头指针即可。
在这种情况下,有两点要注意:
1,链表是否为空链表
2,要插入的节点是不是空指针。
代码实现:
//向单链表中插入一个节点(插入在链开始处)
//输入参数:单链表的头指针和要插入的节点指针
//输出参数:无
//返回值:指向单链表的头指针
SingleList* Insert(SingleList *head,SingleList *node)
{
if(node == NULL)
{
return head
}
else if(head == NULL)
{
return node
}
node->next = head
head = node
return head
}
#include "sll_node.h"#include <stdlib.h>
#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 <stdio.h>
#include <stdlib.h>
#include <time.h>
#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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)