一:先进先出(尾插法)
输入1 2 3,输出1 2 3
#include<iostream>
using namespace std;
class Node {
public:
int score; //这里只写了一个数据域变量,可以根据需要自己加或者写成类模板都可以
Node* next;
};
Node* create() {
Node* head = nullptr;
Node* p1, *p2; //单个节点没有可以用来标识的标识符,我们的p1和p2相当于两个分块的临时结点,通过这两个临时结点来完成数据的输入和结点的链接
int n = 0;
p1 = p2 = new Node;
cin >> p1->score;
//想看懂这个链条结点的搭建过程必须放到动态循环的思维里看,只看一次循环体的内容是无法建立联系的
while (p1->score != 0) {
n++;
if (n == 1) //将头结点和第一个结点连接起来
head = p1;
else
p2 = p1; //顺着第一个结点往后链接
p1 = new Node;
cin >> p1->score;
p2->next = p1;
}
p2->next = nullptr;
return head;
}
int main() {
Node* ptr = create(); //创建一个链表并把头指针地址赋给ptr;便于下面的使用
//下面是对链表的简单使用,自定义部分
while (ptr != NULL) {
if (ptr->score == 3)
cout << "you win" << endl;
else
cout << "you lost" << " ";
ptr=ptr->next; //指针移动到下一位置
}
}
二:先进后出(头插法)
输入1 2 3,输出3 2 1,
// This program illustrates the building
// and traversal of a linked list.
#include <iostream>
#include <fstream>
using namespace std;
struct ListNode
{
double value;
ListNode* next;
// Constructor
ListNode(double value1, ListNode* next1 = nullptr)
{
value = value1; next = next1;
}
};
int main()
{
double number; // Used to read the file
ListNode* numberList = nullptr; // List of numbers
// Open the file
ifstream numberFile("numberFile•dat");
if (!numberFile)
{
cout << "Error in opening the file of numbers.";
exit(1);
}
//Read the file into a linked list
cout << "The contents of the file are: " << endl;
while (numberFile >> number)
{
cout << number << " ";
// 后面的numberlist为旧地址,然后让这个新结点的地址赋给numberlist,这个是头插法,不是尾插法
numberList = new ListNode(number, numberList);
}
// 下面是链表的遍历
cout << endl << "The contents of the list are: " << endl;
ListNode* ptr = numberList; //为了便于理解,这里的ptr就相当于是链表第一个结点的另一个名字
while (ptr != nullptr)
{
cout << ptr->value << " "; // 操作
ptr = ptr->next; // 指针移动
}
return 0;
}