在无头单链表某节点前插入值为data新节点
思路: 用链表中那个节点(pos)的数据新建一个新节点(pNew),该节点的数据赋值为data,然后让新节点(pNew)的指针(Next)指向(pos)节点的下一个节点,再让该节点(pos)的指针(Next)指向新节点(pNext),完成插入。
代码实现
编译环境(Visual Studio 2017)
- 函数
// 在无头单链表某节点前插入值为data新节点
void InsertFront(PNode pos, DataType data)
{
PNode pNew = NULL;
if(NULL != pos)
{
pNew = BuySListNode(pos->_data);//新建节点函数
pos->_data = data;
pNew->_pNext = pos->_pNext;
pos->_pNext = pNew;
}
}
- 测试函数
// 在无头单链表某节点前插入值为data新节点 测试
void InsertFront_test()
{
PNode pHead = NULL;
SListInit(&pHead);//初始化单链表
printf("-----无头单链表插入测试-----------------\n");
printf("原始链表: ");
SListPushBack(&pHead, 0);//头插函数
SListPushBack(&pHead, 1);
SListPushBack(&pHead, 2);
SListPushBack(&pHead, 3);
SListPushBack(&pHead, 4);
SListPrint(pHead);//单链表的打印函数
printf("测试结果: \n");
InsertFront(Find(pHead, 0), 9);
SListPrint(pHead);
InsertFront(Find(pHead, 1), 9);
SListPrint(pHead);
InsertFront(Find(pHead, 2), 9);
SListPrint(pHead);
InsertFront(Find(pHead, 3), 9);
SListPrint(pHead);
InsertFront(Find(pHead, 4), 9);
SListPrint(pHead);
printf("\n");
}
- 测试结果