```cpp
#include <iostream>
using namespace std;
struct ListNode{
int val;
struct ListNode* next;
ListNode(int x) :
val(x), next(NULL){
}
};
int main(){
int num;
cout<<"依次输入链表元素,输入‘\\n‘结束"<<endl;
cin >> num;
ListNode* head = new ListNode(num);
ListNode* tail = head;
while(cin>>num){
ListNode* q = new ListNode(num);
tail->next = q;
tail = tail->next;
}
ListNode* m= head;
while(m != nullptr){
cout<<m->val;
m = m->next;
}
return 0;
}
人生苦短
1.链表
卡在哪里?
首先宏观框架不明了,高屋建瓴没有的
其次细节实现不明了,脚踏实地没有的
谈收获:
while(cin>>num)的用法,检测输入不为空,持续循环
ListNode* m= head; m是个地址,*m是值
但 ListNode* m相当于实例化了,通过m也可以来调用链表里的数据指针
ListNode* m= head;
while(m != nullptr){
cout<<m->val;
m = m->next;
}`
这段代码是先把已经建好的链表头指针给了m,然后m去遍历链表,在检测到m=nullptr,也就是尾指针指向空的时候。
接下来:
实现
/**
编写程序实现ADT表的定义,及常用操作:
1) 判断表是否为空;
标记或者遍历加1
2) 获取第i个节点的内容
传递位置,怎么定位?
3) 删除
指向下一个节点,释放空间
4) 插入
指针指向改变
*/