1 题目描述

  输入一个链表,反转链表后,输出新链表的表头。

2 思路和方法

  (1)利用栈作为中间存储,进行链表的反转,将压入的数据按先进后出的顺序弹出依次赋给链表再输出表头pHead。

  (2)将当前节点数对应的下一个节点数保存tmp=pHead.next,将上个节点数last赋值给pHead.next(初始last为None)。当前节点pHead赋值给last(成为上一个节点),最后将下一个节点tmp赋值给pHead(成为当前结点)。

3 C++核心代码

3.1 入栈出栈

 struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* p=pHead;
ListNode* q=pHead;
stack<int> s1;
while(p!=NULL) //先遍历链表压入栈中
{
s1.push(p->val);
p=p->next;
}
while(q!=NULL) //再遍历链表,将栈中数据弹出依次赋给链表
{
q->val=s1.top();
s1.pop();
q=q->next;
}
return pHead; //链表被更新,pHead依然指向表头
}
};

3.2 链表法

 /*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* last;
ListNode* temp;
last = NULL;
while(pHead!=NULL){
temp = pHead->next;
pHead->next = last;
last = pHead;
pHead = temp;
}
return last;
}
};

4 完整代码

 #include <iostream>

 using namespace std;

 struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
}; class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if (pHead == NULL)
{
return NULL;
} ListNode* p_head = pHead; ListNode* p_fast = p_head->next;
pHead->next = NULL; //指向null,细节
while (p_fast != NULL)
{
ListNode* temp = p_fast->next;
p_fast->next = p_head;
p_head = p_fast;
p_fast = temp;
}
return p_head;
}
}; int main()
{
Solution *s = new Solution();
//vector<int> v = { 2,4,6,1,3,5,7 };
ListNode *l1 = new ListNode();
ListNode *l2 = new ListNode();
ListNode *l3 = new ListNode();
ListNode *l4 = new ListNode();
ListNode *l5 = new ListNode();
ListNode *l6 = new ListNode();
ListNode *l7 = new ListNode();
l1->next = l2;
l2->next = l3;
l3->next = l4;
l4->next = l5;
l5->next = l6;
l6->next = l7; ListNode* out_list = s->ReverseList(l1); cout << int(out_list->val) << endl; system("pause");
return ;
}

参考资料

https://blog.csdn.net/aaa958099161/article/details/90049908

https://blog.csdn.net/zlb666/article/details/87641684

剑指offer15:反转链表后,输出新链表的表头。的更多相关文章

  1. 剑指Offer-15.反转链表(C++/Java)

    题目: 输入一个链表,反转链表后,输出新链表的表头. 分析: 可以利用栈将链表元素依次压入栈中,再从栈中弹出元素重新建立链表,返回头节点. 也可以在原有的链表上来翻转,先保存当前节点的下一个节点,然后 ...

  2. 剑指Offer15 合并两个已排序链表

    /************************************************************************* > File Name: 15_MergeT ...

  3. 剑指offer--22.反转链表

    时间限制:1秒 空间限制:32768K 热度指数:440624 本题知识点: 链表 题目描述 输入一个链表,反转链表后,输出新链表的表头. /* struct ListNode { int val; ...

  4. 用js刷剑指offer(反转链表)

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; this.next = null; }*/ f ...

  5. 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。

    一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...

  6. 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。

    1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...

  7. 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。

    题目描述: 输入一个链表,输出该链表中倒数第k个结点.例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5 节点定义如下: public class ListNode { int ...

  8. 剑指Offer - 九度1505 - 两个链表的第一个公共结点

    剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例.对于每个测试案例 ...

  9. 力扣 - 剑指 Offer 06. 从尾到头打印链表.md

    题目 剑指 Offer 06. 从尾到头打印链表 思路1(递归) 首先先遍历整个脸表,计算出链表的长度(用于初始化数组).然后进行递归,从链表头部递归到尾部,这期间什么都不做,直到递归到最后一个节点的 ...

随机推荐

  1. jmeter+ant执行 报错:Reference xslt.classpath not found 【采坑记录】

    问题: report: BUILD FAILED E:\jmeter\apache-jmeter-4.0\testcase\build.xml:29: The following error occu ...

  2. vue文件中提示Expected Boolean, got String

    这种情况是有一些属性的值应该填写Boolean类型,但是当前的值可能是“”--字符串 这种情况只需要在属性前面加上:即可. eg:

  3. jquery 元素前或插入一元素

    /* *插入方法 */function addEditRow(obj, modelId) { $($("#" + modelId).html()).insertAfter($(ob ...

  4. hive 使用beelin连接报错

    1.在当前服务器启动hiveserver2服务,远程客户端通过beeline连接 报错信息如下: root@master:~# beeline -u jdbc:hive2//master:10000 ...

  5. IdentityServer4入门三:授权模式

    在入门一.入门二我们实现了一个完整的API保护的过程.需要保护的API只需在其Controler上应用[Authorize]特性,来显式指定受保护的资源.而我们实现的这个例子,所应用的模式叫“Clie ...

  6. xposed代码示例

    package com.example.xposedhook; import android.util.Log; import de.robv.android.xposed.IXposedHookLo ...

  7. 2018-2019-2 网络对抗技术 20165202 Exp8 Web基础

    博客目录 一.实践内容 Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML Web前端javascipt 理解JavaScr ...

  8. 加了https,为什么网站的有些网页是安全的,有些网页不完全安全

    加了https,为什么网站的有些网页是安全的,有些网页不完全安全 一.总结 一句话总结: 这里原因:这里出现的问题是 网站上的图片删了没找到 原因:用了http地址(自己的或者别人的)的资源 避免这类 ...

  9. sklearn中的弹性网函数 ElasticNet

    语法:  ElasticNet(self, alpha=1.0, l1_ratio=0.5, fit_intercept=True, normalize=False, precompute=False ...

  10. Java 中的JSON 字符串

    类库选择 Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库. 下面是几个常用的 JSON 解析类库: Gson: 谷歌开发的 JSON 库,功能十分全面. FastJson: 阿 ...