博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表逆序的几种方法
阅读量:7228 次
发布时间:2019-06-29

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

假设单链表数据结构定义如下:

struct ListNode {      int val;      ListNode *next;      ListNode(int x) : val(x), next(NULL) {}  };

单链表有一个头指针指向第一个结点,最后一个结点指向NULL

 

一、最容易想到的方法,新建一个单链表newNode,每次将原先链表的第一个结点放到newNode后

ListNode* reverseList(ListNode* head) {        ListNode *newNode = new ListNode(0);//新链表头结点        ListNode *tmp;//指向原先链表的第一个结点        newNode->next = head;        ListNode *cur = head;        while(cur && cur->next)        {        tmp = newNode->next;//保存后续结点        newNode->next = cur->next;//将原先链表的第一个结点放到新链表中                                 cur->next = cur->next->next;//从原先链表中摘除这个结点        newNode->next->next = tmp;//恢复新链表中后续结点的指针        }        return newNode;            }

 

二、每次将原第一个结点后的结点放在head后面

ListNode* reverseList(ListNode* head) {       ListNode *tmp = NULL;       ListNode *cur = NULL;       if(!head) return NULL;       cur = head->next;       while(cur)       {              tmp = cur->next;              cur->next  = tmp->next;              tmp->next = head->next;              head->next = tmp;       }          return head;    }

 

三、与第二种方法类似,推荐这种方法

ListNode* reverseList(ListNode* head) {        ListNode *cur = head;        ListNode *tmp, *prev = NULL;        while (cur)        {            tmp = cur->next;            cur->next = prev;            prev = cur;            cur = tmp;        }        return prev;    }

 

转载地址:http://mbdfm.baihongyu.com/

你可能感兴趣的文章
NFS服务器设置
查看>>
s:iterator 中的status 使用方法
查看>>
cocos2d-x 源码剖析系列
查看>>
IT系统架构设计
查看>>
Nginx虚拟主机配置实践(一)
查看>>
细谈Spring(一)spring简介
查看>>
网络工程师的面试题
查看>>
nginx启动脚本
查看>>
常用输入法框架简介
查看>>
记录新机房建设。20130629
查看>>
安装ntop
查看>>
ssh远程登录讲解
查看>>
mysql的备份脚本
查看>>
linux下mysql的root密码忘记解决方法
查看>>
7.索引的性能分析
查看>>
在 Delphi 下使用 DirectSound (17): 频率均衡效果器 IDirectSoundFXParamEq8
查看>>
文件操作命令一cp 2
查看>>
Multi-Mechanize工程目录结构说明
查看>>
halt
查看>>
标准ACL+扩展ACL+命名ACL
查看>>