反转链表
来源:互联网 发布:波士顿矩阵图怎么画 编辑:程序博客网 时间:2024/06/04 18:09
其实一直没写过链表。真是灯下黑,要写的时候突然发现对指针的概念又有点懵逼了。。剑指OFFER里面 对链表的函数调用有两种形式(LinkNode** phead)(LinkNode* phead) 第一个表示传入的时候头指针本身,操作时一般解引用*phead,并命名一个头节点的指针来操作要方便点。不然用phead指针在语义上正确,但是操作起来会很麻烦。比如对LinkNode **phead 的赋值就&(LinkNode*) 而且当指针next变化时,本身就跟着变化了,并且有时候需要*phead == null 也需要操作的情况。。用&(null) 不就悲剧了吗于是还是用(LinkNode* phead)来操作。但是有一点。这里传入的对象是LinkNode* phead 头指针的值拷贝,还要返回值来更改phead。。。。
不写不知道一写吓一跳!!!!
struct LinkNode { int value; LinkNode *next; LinkNode(int v) :value(v) {};};struct LinkList { LinkNode *head; void push_back(int value); LinkNode* pop(); LinkList() { head = NULL; }};inline void LinkList::push_back(int value) { LinkNode * node = new LinkNode(value); if (head == NULL) { node->next = NULL; head = node; } else { node->next = head; head = node; }}inline LinkNode* LinkList::pop() { LinkNode* temp = head; head = head->next; return temp;}inline void printLinkList(LinkNode* phead) { using namespace std; if (phead == NULL) { return; } while (phead) { cout << "'" << phead->value << "'" << ends; phead = phead->next; } cout << endl;}inline LinkNode* reseverLinkList(LinkNode* phead) { if (!phead) { return NULL; } LinkNode* temp = NULL; LinkNode* pnode = phead->next; phead->next = NULL; while (pnode) { temp = pnode->next; pnode->next = phead; phead = pnode; pnode = temp; } return phead;}
LinkList link; for (int i = 0; i < 10; i++) { link.push_back(i); } printLinkList(link.head); printLinkList(link.head); link.head = reseverLinkList(link.head); //由于是值拷贝所以需要重新给head赋值,来更新!!!! printLinkList(link.head);
阅读全文
0 0
- 链表反转
- 反转链表
- 单向链表反转
- 链表反转:
- 链表的反转
- 链表反转
- 反转单向链表
- 链表反转
- 单向链表反转
- 单向链表反转
- 链表的反转
- 链表反转
- 反转链表
- 链表反转
- 链表反转
- 链表反转
- 链表反转
- 链表的反转
- 02JDK,JRE,JVM概述
- Java入门学习-学会使用静态变量、掌握单例模式的用法和原理
- 设计模式--单例模式
- 接下来三个月要做的事
- 二分图最大匹配:网络流做法——模板题
- 反转链表
- 深入理解Linux操作系统守护进程的意义
- omacp data
- Redis入门指南之数据类型
- httpcomponents-client-4.5.3 学习笔记(2) 1.2 HttpClient接口
- xpath抓取代理IP并检测IP的有效性
- jsonp详解
- jQuery实现表格冻结行和列
- 快速排序算法C++实现