关于单链表的倒置:
在面试过程中,笔试中会考到许多数据结构的面试题,我们来看一个不是很难的单链表逆置,许多笔试题中都有可能出现这个单链表的逆置。
在这些题中,往往是不存在哨兵位,而给的是一个头指针。什么是哨兵位呢。
哨兵位:创建一个头结点,头结点中不存任何数据,将头结点的_next指向单链表中的第一个数据节点。
这样也许会带来很多便利,面试中往往是不给予头结点的。
给的是一个头指针。我们来看一下吧=。=:
单链表结构体:
typedefintDataType; typedefstructLinkNode { DataType_data; structLinkNode*_next; }LinkNode,*PLinkNode;
单链表逆置的算法代码:
voidReverseLink(PLinkNode&pHead) { PLinkNodetemp=pHead; PLinkNodecur=NULL; pHead=NULL; while(temp) { cur=temp->_next; temp->_next=pHead; pHead=temp; temp=cur; } }
单链表的算法思维:
第一次:
创建2个指针。一个保存当前指针的下一个。
cur=temp->_next;
一个保存当前所需要逆置的指针:
PLinkNodetemp=pHead; temp=cur;
首先取出第一个指针,然后将temp->_next置为NULL。
temp->_next=pHead;//此时pHead已经为NULL
然后将pHead指向temp:
pHead=temp;
最后将temp指向下一个将要逆置的指针:
temp=cur;
第二次:
单链表的逆置大体思路就是:
一个指针保存下一个,另外一个指针保存当前,
将当前的指针取出来,头指针指向它,
然后就是不断往下取进行头插。
这就是单链表逆置的思想,只用遍历一次链表就可以完成。
QWQ
原文链接:https://www.f2er.com/datastructure/382582.html