样例模型是一个长度为6的数组[1,2,3,4,5,6]
C++:
前插法:前插法是通过将新结点逐个插入链表的头部(头结点之后)来创建链表,每次申请一个新结点,读入相应的数据元素值,然后将新结点插入到头结点之后
算法步骤:
1,创建一个只有头结点的空链表.
2,根据待创建链表包括的元素个数,循环n次执行以下操作:
生成一个新结点*p;
输入元素值赋给新结点*p的数据域;
将新结点*p插入到头结点之后。
因为前插法按照逆位序输入数据,所以输入应为6 5 4 3 2 1,输入数据和线性表中的逻辑顺序是相反的
#include<iostream>
#include<stdio.h>
#include<malloc.h>
using namespace std;
typedef struct LinkList
{
int data;
struct LinkList *next;
}LinkNode;
int main()
{
LinkNode *L=new LinkNode;
L->next=NULL;
for(int i=0;i<6;i++)
{
LinkList *p=new LinkNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
LinkNode *q=L;
while(q)
{
q=q->next;
cout<<q->data<<' ';
}
}
尾插法:尾插法是通过将新结点逐个插入到链表的尾部来创建链表。同前插法一样,每次申请一个新结点,读入相应的数据元素值。不同的是,为了使新结点能够插入到表尾,需要增加一个尾指针r指向链表的尾节点。
算法步骤:
1,创建一个只有头结点的空链表。
2,尾指针r初始化,指向头结点。
3,根据创建链表包括的元素个数n,循环n次执行以下操作:
生成一个新结点*p;
输入元素值赋给新结点*p的数据域;
将新结点*p插入到尾结点*r之后;
尾指针r指向新的尾结点*p。
#include<iostream>
#include<stdio.h>
#include<malloc.h>
using namespace std;
typedef struct LinkList
{
int data;
struct LinkList *next;
}LinkNode;
int main()
{
LinkNode *L=new LinkNode;
L->next=NULL;
for(int i=0;i<6;i++)
{
LinkList *p=new LinkNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
LinkNode *q=L;
while(q)
{
q=q->next;
cout<<q->data<<' ';
}
}
Python:
输出一个由两个列表组成的单链表:
把链表中的每一个元素存储的值存储在一个列表里,再把它们的指针存储在另一个列表里。
ListValue = [1,5,6,2,4,3]
ListPointer = [3,2,-1,5,1,4]#两个数组中,相同下标的元素组成链表的一个元素,两个列表合起来成为了一个链表
next = 0
while next != -1:
print(ListValue[next],end = ' ')
next = ListPointer[next]
输出一个列表套列表组成的单链表:
List = [[1,3],[5,2],[6,-1],[2,5],[4,1],[3,4]]#大数组中的每个小数组都是链表中的一个元素,每个小数组中的第一个数是这个元素存储的值,第二个数是指向下一个元素的指针。调用大数组List中第m个小数组中第n个元素可以这样写:List[m-1][n-1](下标从0开始)
value = 0
pointer = 1
next = 0
print(List[next][value],end = ' ')
next = List[next][pointer]
while next != -1:
print(List[next][value],end = ' ')
next = List[next][pointer]