无头结点单链表的逆置_笔试面试单链表相关(2)在任意位置前插入结点、逆置链表...

本文介绍了如何在无头单链表中在一个非头结点前插入元素,以及如何实现链表的逆置操作。通过InsertFront函数在指定位置插入结点,使用Turn函数完成链表的逆置。这些操作对于理解和处理单链表数据结构至关重要。
摘要由CSDN通过智能技术生成

1、在无头单链表的一个非头结点前插入一个结点

2、逆置链表

单链表结构以及Find函数参见 2016-1-2 13:56 发表博客

void InsertFront(SListNode*pos, const DataType x)  //在无头单链表的一个非头结点前插入一个结点

{

//初步思路:在pos后插入元素,再与pos的值互换(若传入的是头结点则也可运行)

//还能进行优化为:在pos后插入值为pos->data的结点,再将pos值变为x

SListNode *tmp = _BuyNode(pos->data);

tmp->next = pos->next;

pos->next = tmp;

pos->data = x;

}

void Turn(SListNode*&pHead)  //逆置链表

{

//思路:从第二个开始顺次将结点放在头结点位置

//assert(pHead);//考虑到可能传入NULL时也合理,所以在这里不能使用断言assert

if (pHead)

{

SListNode*NewHead = pHead;

SListNode*cur = pHead;

while (cur->next)

{

SListNode*tmp = cur->next;

cur->next = tmp->next;

tmp->next = NewHead;

NewHead = tmp;

}

pHead = NewHead;

}

}

void Test5()  //InsertFront/Turn

{

printf("//Test5() InsertFront/Turn \n");

SListNode *LL = NULL;

PushBack(LL, 1);

PushBack(LL, 2);

PushBack(LL, 3);

PushBack(LL, 5);

PrintNode(LL);

InsertFront(Find(LL,1),0);

PrintNode(LL);

InsertFront(Find(LL, 5), 4);

PrintNode(LL);

Turn(LL);

PrintNode(LL);

}

ee1ad9c2da206978fe2d3fdaa938526b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值