由于实现链表(Linked List)是实现一种数据结构,使用结构体(structure),而不是必须使用 Class。所以 C 和 C++ 没区别。
需要说明一下,这里的一些名词和一些教材上所指不同,需要注意哦!
链表原理
链表其实是一个个连接起来的节点,每个节点包含两个数据:值和下一个节点的地址。
如下是一个有三个节点的链表,nullptr 是表示链表结尾的指针:
node1
node2
node3
nullptr
实现链表
知道了链表的数据结构,实现起来就是照做。
第一步:实现链表节点的数据结构
下面这个结构体就声明了一个数据结构,包含了一个值(这个类型自己决定)和一个指针(用于存放指向下一节点的指针或者末尾指针nullptr ),就可以实现链表的基础数据结构(也是通常实现链表的方式):
struct NodeList
{
int val;
ListNode *next;
}
第二点:实现一个简短的链表
上面声明了链表节点的数据结构,只需要穿起来就可以实现一个链表了。下面来实现一个简单的链表:
int main() {
ListNode *a, *b, *c;
a=new ListNode();
b=new ListNode();
c=new ListNode();
a->val=10;
a->next=b;
b->val=11;
b->next=c;
c->val=12;
c->next=nullptr;
cout<<c->val<<endl;
cout<<a->next->next->val<<endl;
return 0;
}
第三步:如何实现和按顺序输出一个较长的链表呢?
有两种方法:
- 在写代码的时候,一个一个节点的输入;
- 在编译后,一个个输入;
- 使用迭代来输出多个值。
前二者就像上文,使用起来不是特别方便,而且也说过了,所以这里讲一下第三种。
方法如下:
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
};
int main() {
ListNode *head, *temp, *tail;
int i;
head = new ListNode;
tail = new ListNode;
i=10;
head->val=i;
head->next=tail;
while (i>0){
tail->val = --i;
temp = new ListNode;
tail->next = temp;
tail = temp;
}
while (head->next!=nullptr){
cout<<head->val<<endl;
head=head->next;
}
return 0;
}
输出结果如下:
10
9
8
7
6
5
4
3
2
1
0
希望可以帮到有需要的人~
|