《剑指offer》面试题16—反转链表
Node* p1 p2 p3
思路:开始时,p1为NULL,p2=phead,p3=p2—>next。使p2—>next = p1,然后使p1=p2,p2=p3。如果只有1个结点则此时p2为NULL,结束循环;否则继续执行,直到p2为NULL。
注意:注意代码鲁棒性!判断头结点为NULL;如果只有一个结点。
#include <iostream>
using namespace std; class Node
{
public:
Node(int v, Node* n)
{val = v;
next = n;}
~Node(){}
int val;
Node* next;
};
Node * phead = NULL;
Node * pReverseHead = NULL; void AddNode(int val)
{
Node* pnode = new Node(val,NULL);
//Node one_node(val,NULL); 这里有大bug!如果这样写,在函数退出时自动调用析构函数!链表就乱了!
if(phead == NULL)
{
phead = pnode;
}
else
{
Node* p = phead;
while(p->next != NULL)
{
p = p->next;
}
p->next = pnode;
}
}
void PrintLink()
{
Node* p = phead;
while(p != NULL)
{
int temp = p->val;
cout<<temp<<endl;
p = p->next;
}
}
void PrintLinkReverse()
{
Node* p = pReverseHead;
while(p != NULL)
{
int temp = p->val;
cout<<temp<<endl;
p = p->next;
}
}
Node* ReverseLink()
{
Node* pPrev = NULL;
Node* pNode = phead;
Node* pNext;
if(phead == NULL) return NULL;
while(pNode != NULL)
{
pNext = pNode->next;
if(pNext == NULL)
{
pReverseHead = pNode;
} pNode->next = pPrev;
pPrev = pNode;
pNode = pNext; }
return pReverseHead;
}
int main()
{
int val;
cin>>val;
while(val != )
{
AddNode(val);
cin>>val;
}
PrintLink();
Node* pReverseHead = ReverseLink();
cout<<"Reverse:"<<endl;
PrintLinkReverse();
return ;
}
《剑指offer》面试题16—反转链表的更多相关文章
- 剑指Offer:面试题16——反转链表(java实现)
问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...
- 剑指Offer - 九度1518 - 反转链表
剑指Offer - 九度1518 - 反转链表2013-11-30 03:09 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试 ...
- 剑指Offer面试题:14.链表的倒数第k个节点
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...
- 剑指offer 面试题35.复杂链表的复制
时间O(N),空间O(N) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomList ...
- C++版 - 剑指offer 面试题16:反转链表(Leetcode 206: Reverse Linked List) 题解
面试题16:反转链表 提交网址: http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId= ...
- 【剑指offer 面试题16】反转链表
思路: 用三个指针preNode.curNode.nextNode完成. #include <iostream> using namespace std; struct ListNode ...
- 剑指Offer面试题16(Java版):反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 解决与链表相关的问题总是有大量的指针操作.而指针操作的代码总是easy出错的. 非常多的面试官喜欢出链表相关的问题,就是 ...
- 剑指offer(15)反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素. 题目分析 至少需要三个指针pPre(指向前一个结点).pCurrent(指向当前的结点,在代码中就是pHead).pPnext(指向后一个结点 ...
- 剑指offer十五之反转链表
一.题目 输入一个链表,反转链表后,输出链表的所有元素. 二.思路 详细分析见代码注释 三.代码 public class Solution { public ListNode Reverse ...
- 剑指offer——面试题16:数值的整数次方
// 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需 ...
随机推荐
- Carriage-Return Line-Feed
Git 提交时报错warning: LF will be replaced by CRLF in - CSDN博客 https://blog.csdn.net/yan_less/article/det ...
- call by value reference name
按名调用 Algol 按值调用 Java https://docs.python.org/3.6/faq/programming.html#how-do-i-write-a-function-with ...
- mybatis入门(七)
mybatis入门--添加一个用户 //添加用户 @Test public void insertUserTest() throws IOException { // 通过工厂得到SqlSession ...
- 初学php html javascript后小总结
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/c3568/article/details/30474015 转载请注明出处:http://blog. ...
- 【LeetCode】Binary Tree Inorder Traversal
Binary Tree Inorder Traversal Total Accepted: 16406 Total Submissions: 47212My Submissions Given a b ...
- ZOJ - 3954 Seven-Segment Display 【状态标记】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3954 题意 有一块 LED 灯 然后上面有七块灯管 在显示不同数 ...
- Android Weekly Notes Issue #246
Android Weekly Issue #246 February 26th, 2017 Android Weekly Issue #246 本期内容包括: RecyclerView上的Shared ...
- windows server 2008 + IIS 7.5实现多用户FTP(多账号对应不同目录
在windows server 2003 + IIS 6 的时候,就已经能实现多用户FTP的功能,不过设置有写繁琐,如果站点多的话,设置账号.权限这些东西都要搞很久.Windows server 20 ...
- underscore.js中模板函数应用
一.使用技术要点 (1)使用zepto.js的ajax请求; (2)使用underscore.js的_.template设定模板,模板一般以<script type="text/tem ...
- LightOJ1213 Fantasy of a Summation —— 快速幂
题目链接:https://vjudge.net/problem/LightOJ-1213 1213 - Fantasy of a Summation PDF (English) Statisti ...