用头插法复制单链表

最近在准备考研复试,刷OJ上面的题目,其中遇到了让我们从尾到头输出单链表的值,其实应该是很容易的题目用一个栈就能解决,但是自己当时忽然大脑短路只想到了头插法,于是自己又创建一个链表用头插法进行复制然后输出,中间遇到了不少问题,最后才算磕磕绊绊的搞定!下面先贴代码,然后说下错处

代码部分

vector<int> printListFromTailToHead(ListNode* head) {
	vector<int> list;
	if (head == NULL) {
		return list;
	}
	ListNode * newHead = new ListNode;
	
	ListNode * r = head;

	while (r->next != NULL) {
		ListNode *p = new ListNode;
		p->next = NULL;
		p->next = r->next->next;
		p->val = r->next->val;

		p->next = newHead->next;
		newHead->next = p;
		r = r->next;
	}

	int i = 0;
	ListNode * q = newHead;

	while (q->next != NULL) {
		list.push_back(q->next->val);
		i++;
		q = q->next;
	}

	return list;
}

错误原因

上述代码看着好像是对的,但是在实际运行中是会出错的,错误如下
在这里插入图片描述
读取访问冲突,这个有点尴尬了,作为一个新手一直弄了好久才发现问题,问题就在下面的这句代码

ListNode * newHead = new ListNode;

这句代码看着是没有问题的,但是我们在创建一个新节点的同时因为这是一个指针类型,它会默认指向一个垃圾地址,因此我们在使用它之前必须要进行一次初始化,否则就会报错,因此我们要再加上一句

	ListNode * newHead = new ListNode;
	newHead->next = NULL;	//保证newHead指针的指向不会发生冲突

这个错误应该是很多初学者容易犯的,特别像我这种没有接触过C++的人更是容易犯错!通过这个程序自己也总结了一些我平时没有在意的知识点

  1. vector创建数组 vector list 之前一直以为vector必须要在list后面写上数值,现在发现可以直接用这种形式
  2. vector数组赋值用到的方法 .push_back
  3. 巩固复习了一下头插法
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值