C++——单链表的原地逆转以及建模板链时遇到的报错信息
来源:互联网 发布:高中数学必修三算法 编辑:程序博客网 时间:2024/06/14 13:07
main.cpp:
#include <iostream>#include "node.h"using namespace std;void inverted(node* &head,int latter_num,node* &temp);int main(){ //head为空 表头节点 指向第一个节点。注意一定要用new。node* head;←这样是不对的 node* head = new node(); node* curr = new node(); //temp不可以放在inverted函数里new 这样的话每调用一次都会new一个新的出来 最后给head赋值的时候赋的是空值 node* temp = new node(); curr = head; for(int i = 0;i < 10;i++) { cout<<"请输入第"<<(i+1)<<"个数据"<<endl; int data; cin>>data; node* newNode = new node(data); curr -> next = newNode; curr = curr -> next; } cout<<endl; for(int i=10;i>0;i--) { //head 对应node* & inverted(head,i,temp); } curr = head; for(int i = 0;i<10;i++) { curr = curr->next; cout<<curr->nodeValue<<endl; }} void inverted(node* &head,int latter_num,node* &temp){ node* prev = new node(); node* curr = new node(); curr = head->next; prev = head; for(int i = 0;i < latter_num-1;i++) { curr = curr->next; prev = prev->next; } curr->next = prev; if(latter_num == 10) { // node *temp = new node(); temp->next = curr; } else if(latter_num == 1) { head = temp; }}
node.h:
#include<cstdlib>class node{ public: node* next; int nodeValue; node():next(NULL) {} node(const int& item,node* nextNode = NULL):nodeValue(item),next(nextNode) {} };
本来想建成模板链的,遇到了一些错误 :
‘NULL’ wasn’t declared in this scope需要头文件 <stddef.h> 或 <stdlib.h> 或 <cstdlib>
Missing template arguments before “alist”代码:linkedlist alist()改为linkedlist<int> alist()定义类对象时也需要用模板
invalid use of template-name 'linkedlist' without an argument listlinkedlist::linkedlist(node<T>* first,int size)改为linkedlist<T>::linkedlist(node<T>* first,int size)
'T' was not declared in this scopetemplate<class T>void f(){}<---- 这之后T就不能用了template<class T> <--- 这个T和上面的T不是一个
undefined reference to `linkedlist<int>::linkedlist(node<int>*, int)'g++不支持模板类的分离编译,因此模板的实现最好都些在.h文件中,否则将出现undefined reference to XXXX 的错误。还有可能和宏定义重复定义有关 比如说ifndef巴拉巴拉
将linkedlist变为类后可以不这么写:node<int> *first = new node<int>();linkedlist<int> alinked(first,10);因为这样写的本意是想通过第一个节点去辨识一条链 但其实根本不需要这样 因为把linkedlist也作为类之后它本身的对象就可以区分不同的链(由于print的时候要遍历 可以在linkedlist中添加一个数据成员 就是head 这样就不用传参数了)
一点疑问:
首先定义一个指向Head的指针q;
然后不断重复以下三个步骤完成单链表的构造:
①用new申请一个LinkNode的空间返回指针p,并输入数据元素;
②q->next=p,将q指针对应结点的后继修改为p;
③q=q->next,将指针指向其直接后继,这样一个结点就被链接进了链表之中。
可是为什么这样就可以完成单链表的构造?为什么不是head的next依旧是NULL 只是以q为head建了一条链呢
阅读全文
0 0
- C++——单链表的原地逆转以及建模板链时遇到的报错信息
- 单链表的原地逆转 (只遍历一次)
- //链表的原地逆转
- 求单链表的最大值与原地逆转
- 单链表的逆转 C语言
- 单链表的插入删除以及逆转
- 单链表——单链表的逆转
- C语言:字符串的逆转
- 单链表的逆转
- 单链表的逆转
- 单链表的逆转
- 单链表的就地逆转
- 单链表的逆转
- 单链表的逆转实现
- 单链表的逆转
- 单链表的逆转
- 单链表的逆转
- 单链表的逆转
- 机器学习算法与Python实践(10)
- RabbitMQ (五)主题(Topic)
- 让你变得更加高效的一些Java工具和类库
- 响应式Web设计学习笔记
- PAT乙级1030. 完美数列(25)
- C++——单链表的原地逆转以及建模板链时遇到的报错信息
- 零基础入门Android语法与界
- mooc浙大翁恺java课程第一周作业
- 设计模式【依赖倒转原则】
- IIS-ASP入门(一)环境配置
- Web开发踩过的坑
- ue4 蓝图 转换 c++ 类变量付空值问题
- hotoshop入门基础
- 数据结构与算法分析(Java 语言描述)(36)—— 使用两个队列实现一个栈