c语⾔单向链表逆序,C语⾔实现单链表(不带头结点)的逆序
打印
基本算法是:
(1)使⽤尾插法构建原链表;
(2)依次遍历原链表;
(3)取出遍历中的节点使⽤头插法建⽴⼀个新链表;
(4)打印逆序后的新链表;
原理就是头插法每次插⼊的节点都是链表的第⼀个,第⼀个插⼊的会变成最后⼀个,最后⼀个插⼊的就成了第⼀个节点。所以就会造成逆序。
核⼼代码如下:
//声明逆序后的链表
Node *pReverseList;
//头插法建⽴逆序后的链表
void HeadInsert(Node *pInsert){
if (pReverseList == NULL) {
//这个是第⼀个节点c语言listinsert函数
pReverseList = pInsert;
}else{
//下⾯的是头插的语句
pInsert->next = pReverseList;
pReverseList = pInsert;
}
}
/
/遍历链表并使⽤头插法构建新链表
void scanList(Node *pNode){
//⾸先判断原链表是否为空;
if (pNode == NULL) {
printf("%s函数执⾏,原链表为空,⽆法逆序输出\n",__FUNCTION__);
}else{
Node *pMove; //该节点⽤来在原链表中移动
Node *pInsert; //该节点为新建的插⼊节点
pInsert = (Node *)malloc(sizeof(Node));
memset(pInsert, 0, sizeof(Node));
pInsert->next = NULL;
pMove = pNode;
while (pMove != NULL) {
//遍历到每⼀个节点后,调⽤头插法函数插⼊新链表pInsert->element = pMove->element;
HeadInsert(pInsert);
//为插⼊的下⼀个节点分配空间
pInsert = (Node *)malloc(sizeof(Node));
memset(pInsert, 0, sizeof(Node));
pInsert->next = NULL;
pMove = pMove->next;
}
printf("%s函数执⾏,逆序链表完成\n",__FUNCTION__); }
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论