博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反转链表
阅读量:6972 次
发布时间:2019-06-27

本文共 805 字,大约阅读时间需要 2 分钟。

要求:定义一个函数,将一个链表反转。链表节点定义如下:

struct ListNode{	int data;	ListNode *m_pNext;};
思路:所谓反转即将链表中某个节点的原本指向后一个节点的指针域指向前一个节点,如果用pCurrent表示当前处理节点,pPrev表示当前处理节点的前一个节点,则很容易想到,反转即pCurretn->m_pNext=pPrev;但是如果直接这么操作的话,因为当前处理节点的下一个节点(记为pNext)的地址保存在pCurrent->m_pNext中,所以如果直接将当前节点指向前一个节点,则pNext的地址丢失,所以不能直接将pCurretn->m_pNext=pPrev;在这个语句之前,我们应该保存pNext的值,即pNext=pCurrent->m_pNext;
用图表示思路如下:
基于上述思路代码如下:
void reverseList(ListNode * pHead){	ListNode *pCurrent=pHead->m_pNext;//pCurrent的初始值指向第一个节点	pHead->m_pNext=NULL;//首先断开头节点	while(pCurrent!=NULL)	{		ListNode *pNext=pCurrent->m_pNext;//保存pNext的值,初始值指向第二个节点		pCurrent->m_pNext=pHead->m_pNext;//每次从原链表中摘下当前处理节点,让其指向反转后链表的第一个节点,初始值为让原链表中的第一个节点的指针域置空		pHead->m_pNext=pCurrent;//让头节点指向当前结点		pCurrent=pNext;//将当前节点后移,指向下一个带插入的节点	}}

转载于:https://www.cnblogs.com/hainange/p/6334073.html

你可能感兴趣的文章
git 多人协作
查看>>
Linux中profile
查看>>
php 实现下载
查看>>
好文分享之--被无现金社会抛弃的人 - 引发我的思考
查看>>
SQL Server Database 维护计划创建完整的备份策略
查看>>
ASP.NET 压缩输出的HTML字符
查看>>
启动Sql server的服务CMD命令
查看>>
Ubuntu下实现Nginx+Tomcat实现负载均衡
查看>>
HTML <img> 标签的 height 和 width 属性
查看>>
QT 用listveiw显示图片
查看>>
KVO 底层实现
查看>>
【Todo】Java的JIT机制
查看>>
使用node 创建一个新项目
查看>>
主机名/etc/hosts文件的作用
查看>>
vue 使用props 实现父组件向子组件传数据
查看>>
php课程 10-35 php实现文件上传的注意事项是什么
查看>>
php实现 合唱队形(算法想清楚在动)
查看>>
html5--6-47 阶段练习2-渐变按钮
查看>>
手机归属地查询
查看>>
How to Setup MySQL (Master-Slave) Replication in CentOS
查看>>