我是靠谱客的博主 知性奇迹,最近开发中收集的这篇文章主要介绍【剑指offer06】【C++】从尾到头遍历链表题目题解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【剑指offer06】【C++】从尾到头遍历链表

  • 题目
  • 题解

题目

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000

题解

笔记:
1.vector数组插入元素到首个位置:

	v.insert(v.begin(),value);
	//在第二个元素前插入新元素1
    v.insert(v.begin()+2,1);
	//删除单个元素,从0开始计数,删除第二个元素
    v.erase(v.begin()+2); 
	//删除一段元素,删除迭代器第一到第五区间所有元素
	v.erase(v.begin()+1,v.begin()+5);   //删除的起始位置和删除的最后一个元素的下一个位置

2.什么时候用->,什么时候用. 需要清楚,ptr->val或者(*ptr).val;

对于a.b,
	a一定是某个类的一个具体的对象(或对于这个对象的引用)。
对于a->b,
	如果a是个指针,b就是指针a指向的对象的一个成员;
	如果a是某个重载了操作符->的类的对象,那么被重载过的->()方法就会被调用

代码:

struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
	vector<int> reversePrint(ListNode* head) {
		vector<int> v;
		if (head != nullptr) {
			//如果是(*head)则整体不是指针了,用“.”,或者head->val
			v.insert(v.begin(), head->val);
			ListNode* pnode = head;
			while (pnode->next != nullptr) {
				pnode = pnode->next;
				v.insert(v.begin(), pnode->val);//或者用(*pnode).val
			}
		}
		return v;
	}
};

//方法2:reverse
class Solution {
public:
	vector<int> reversePrint(ListNode* head) {
		vector<int> res;
		while (head) {
			res.push_back(head->val);
			head = head->next;
		}
		reverse(res.begin(), res.end());
		return res;
	}
};

最后

以上就是知性奇迹为你收集整理的【剑指offer06】【C++】从尾到头遍历链表题目题解的全部内容,希望文章能够帮你解决【剑指offer06】【C++】从尾到头遍历链表题目题解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部