非循环单链表相关内容(上)
(本文所用语言为C++,是个人在初学时所整理的部分代码,加上自身的一些理解。)
结点(node)结构:
struct node {
int data;
node *next;
};
单链表一个结点由一个数据元素data和指针元素next构成,data用于存放结点node的数据,next用于指向下一个结点,多个结点相连,就构成了一个最基础的链表。
头插法创建单链表:
node *newList_Head() {
node *s;
int x;
node *l = new node;
l->next = NULL;
cin >> x;
while (x != 9999) {
s = new node;
s->data = x;
s->next = l->next;
l->next = s;
cin >> x;
}
return l;
}
不断输入数据元素,当输入9999时停止输入并生成返回单链表。
头插法创建单链表时,输入数据的顺序和最终生成单链表的元素顺序是相反的。这是因为每一次添加数据时所生成的包含该数据的结点,都会插入到最后一个结点之前,而不是直接插入到链表后面。
(代码最后返回的数据类型是头结点的地址)
尾插法创建单链表:
node *newList_Tail() {
int x;
node *l = new node;
node *s, *r = l;
cin >> x;
while (x != 9999) {
s = new node;
s->data = x;
r->next = s;
r = s;
cin >> x;
}
r->next = NULL;
return l;
}
不断输入数据元素,当输入9999时停止输入并生成返回单链表。
尾插法创建单链表时,输入数据的顺序,就是最终生成单链表的元素顺序。每一次插入结点的位置,都在前一个结点的后面,同时指向结点的指针也会不断移动,最终形成一个和输入顺序一致的单链表。
做题时可以在不同情况下使用头插法和尾插法,尤其是涉及到链表逆置的相关题目,往往有着很不错的效果。
寻找第i个结点所对应的元素
node *getElem_Pos(node *&l, int i) {
int n = 1;
node *s = l;
s = s->next;
while (n < i) {
s = s->next;
n++;
}
return s;
}
从链表表头结点l开始依次向后遍历,直到指针s指向链表l的第i个结点,最终返回的是该结点的地址。