反转链表输出

题目:输入一个链表,从尾到头打印链表每个节点的值。

解题:使用容器的头插入,或者自己再建一个链表,头插入!而且链表在做的时候要咨询是否可以改变其结构!
以及头结点是否有存储有用数据(因为这个因需求设计而异)


总结:关于链表知识,头指针、头结点、第一个节点区别!头指针指向头结点,一般头结点不算第一个节点,
头结点的存在使得链表可以是空表,也使得链表的插入查询等操作保持一致性!这一点非常有用,

当然也有链表的头节点存放有用的数据,这个时候头结点就是第一个节点了!

下面代码,含测试。

struct ListNode {
	int val;
	struct ListNode *next;
	/*ListNode(int x) ://链表初始化
		val(x), next(NULL) {}*/
	ListNode(int x) //链表初始化
	{
		val = x;
		next = NULL;
	}
};
vector<int> printListFromTailToHead(ListNode* head) {
	if (head == NULL)
		return vector<int>();
	ListNode* p = head,new_head(0);
	ListNode* p_new = &new_head;//新建一个链表,头指针指向头结点
	vector<int> list;
	while (p)
	{
		ListNode* temp = p_new->next;//先保持之前接的
		p_new->next = p;
		p = p->next;
		p_new->next->next = temp;//再接回去
	}
	p = p_new->next;//头结点不要,里面的东西不属于
	while (p)
	{
		list.push_back(p->val);
		p = p->next;
	}
	return list;
}
int main()
{
	ListNode a(1),b(2),c(3);
	ListNode* head = &a;
	a.next = &b;
	b.next = &c;
	c.next = NULL;
	vector<int> list = printListFromTailToHead(head);
	vector<int>::iterator it = list.begin();
	for (; it != list.end(); it++)
		printf("%d\n",*it);
	while (1)
	{
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值