C++ 链表 栈* 容器*

C++从尾到头打印链表

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个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;
	whileL1{//找到尾节点
		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;
    }
};

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值