【数据结构】单链表的倒置

    关于单链表的倒置:

    在面试过程中,笔试中会考到许多数据结构的面试题,我们来看一个不是很难的单链表逆置,许多笔试题中都有可能出现这个单链表的逆置。

    在这些题中,往往是不存在哨兵位,而给的是一个头指针。什么是哨兵位呢。

    哨兵位:创建一个头结点,头结点中不存任何数据,将头结点的_next指向单链表中的第一个数据节点。    

    这样也许会带来很多便利,面试中往往是不给予头结点的。

    给的是一个头指针。我们来看一下吧=。=:

    单链表结构体:

typedef int DataType;

typedef struct LinkNode
{
	DataType _data;
	struct LinkNode *_next;
}LinkNode,*PLinkNode;

    单链表逆置的算法代码:  

void ReverseLink(PLinkNode &pHead)
{
   PLinkNode temp = pHead;
   PLinkNode cur = NULL;
   pHead = NULL;
   while(temp)
   {
	   cur = temp->_next;
	   temp->_next = pHead;
	   pHead = temp;
	   temp = cur;
   }
}

    单链表的算法思维:

第一次:

wKioL1Y53anxdlc5AADV7wc9Aro793.jpg

创建2个指针。一个保存当前指针的下一个。

cur = temp->_next;

一个保存当前所需要逆置的指针:

PLinkNode temp = pHead;
temp = cur;

首先取出第一个指针,然后将temp->_next置为NULL。

	   temp->_next = pHead;//此时pHead已经为NULL

然后将pHead指向temp:

	   pHead = temp;

最后将temp指向下一个将要逆置的指针:

	   temp = cur;

第二次:

wKiom1Y53Wrz_04tAADlaNPV7NE642.jpg


单链表的逆置大体思路就是:

  1. 一个指针保存下一个,另外一个指针保存当前,

  2. 将当前的指针取出来,头指针指向它,

  3. 然后就是不断往下取进行头插。

这就是单链表逆置的思想,只用遍历一次链表就可以完成。

QWQ

本文出自 “剩蛋君” 博客,转载请与作者联系!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值