题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
结果
运行时间:3ms
占用内存:472k
知识点
链表:节点+节点 (结点)p1 -> p2 -> p3
节点:值+指针 p->val + p->next链表分类+链表间的操作+链表与其他数据结果间的操作。。。。。这里都没有!
//单链表插入
void insertNode(Node *p, int i){//p节点后插入值为i的节点
Node* node = new Node;
node->value = i;//值
node->next = p->next;//指针 node指向了p中i位置的下一个节点
p->next = node;//节点 p断开原来指向i位置指针,指向node完成节点插入
}
void insertHead(Node *L, int i){//L表头插入值为i的节点
Node * node = new Node;
node->value = i;
node->next = L;//新节点下一节点指向表头
L = node;//换头节点
}
void insertTail(Node *L,int i){//L表尾插入值为i的节点
Node * node = new Node;
Node * L1 = L;
node->value = i;
while(L1){//找到尾节点
if(L1->next == NULL)//尾节点指针为空
L1->next = node;//尾节点指针指向新节点
L1 = L1->next;
}
return L;
}
//单链表删除————对应插入————
栈:先进后出
在这里插入代码片
vector容器 和模版类什么关系?下回分解!
使用模版类+函数实现:向量、链表、队列、栈这里都没有!!!
//1)
vector<int> a;
a.push_back(1); //在尾部加入一个数据
a.push_back(2);
a.pop_back(); //删除最后一个数据
a.insert(a.begin(), 0); //在a.begin()之前加入0
a.erase(a.begin()); //将a.begin()的元素删除
a.erase(a.begin() + 1, a.end()); //将第二个元素以后的元素均删除
//2)
/*
链表日后总结
*/
代码
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
//可以用递归实现吗???
//序列容器
vector<int> arr ;
//list的头结点
if(head==NULL)
{
//arr = NULL;
return arr; //空表
}else
{
while(head->next!=NULL)//找到尾节点
{
//a.insert(a.begin(), 0); //在a.begin()之前加入0
arr.insert(arr.begin(),head->val);
//a.push_back(1); //在尾部加入一个数据
//arr.push_back(head->val);//在尾部插入head->val
head=head->next;
}
//arr.push_back(head->val);
arr.insert(arr.begin(),head->val);
}
return arr;
}
};