牛客网剑指offer第二题,替换空格,原地址在这https://www.nowcoder.com/ta/coding-interviews
想要练习的小伙伴可以去练习,期待大家都能拿到好的offer。
输入一个链表,从尾到头打印链表每个节点的值。首先记录一下链表的定义
先从python开始,python没有指针这个概念,所以定义起来一般就这样,python里是将链表的值添加到list里,c++利用栈的用法
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x #值
self.next = Nono #下一个点
c++中链表,用结构体来表示,可以是这样
struct node{
int num;
struct node *next;//这个还是调用自己,然后给下一个点的地址
}
解题答案如下,这是c++的
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector <int> result;//定义一个容器
ListNode* p=head; //将listnode *p指向头
stack <int>stk; //定义一个栈
while(p != NULL){
stk.push(p->val);//在栈里压入p->val的值
p=p->next;//P指向next
}
int len=stk.size();
for(int i=0;i<len;i++)
{
result.push_back(stk.top()); //这是vector容器的一个用法,将栈顶的值赋值到result的尾部
stk.pop();//从栈顶弹出一个成员
}
return result;
}
};
python如下:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
l = []
while(listNode):
l.append(listNode.val)
listNode = listNode.next
return l[::-1]#从尾到头排序
# write code her
简单提一下栈的几个用法
首先看一下原c++栈的方法的基本用法:
- push(): 向栈内压入一个成员;
- pop(): 从栈顶弹出一个成员;
- empty(): 如果栈为空返回true,否则返回false;
- top(): 返回栈顶,但不删除成员;
- size(): 返回栈内元素的大小;