一、单链表的创建

  • 前插法(头插法)
  • 后插法

二、单链表的逆转

一、单链表的创建

1.前插法:
在这里插入图片描述
思路:总将新节点插到链表前端,成为首元节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode* next; //结点的指针域
} LNode, * LinkList; //LinkList为指向结构体LNode的指针类型

void create_list_h(LinkList &L,int n)
{
L=new LNode;
L->next=NULL;//建立带头结点的单链表
for(int i=n;i>0;i--)
{
LinkList p=new LNode;//生成新结点
cin>>p->data;//输入元素值
p->next=L->next;
L->next=p;//插入到表头
}
}

2.后插法:
在这里插入图片描述
思路:总将节点插到链表的尾部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode* next; //结点的指针域
} LNode, * LinkList; //LinkList为指向结构体LNode的指针类型

void create_list_r(LinkList &L,int n)
{
L=new LNode;
L->next=NULL;
LinkList P=L;//尾指针指向头节点
for(int i=0;i<n;i++)
{
LinkList q=new LNode;
cin>>q->data;
q->next=NULL;
P->next=q;//插入到表尾
P=q;//q指向新的尾节点
}
}

二、单链表的逆转

在这里插入图片描述思路:先把链表一分为二,再利用前插法逐一接到头结点处。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode* next; //结点的指针域
} LNode, * LinkList; //LinkList为指向结构体LNode的指针类型

void list_inverse(LinkList &L)
{
LinkList P,q;
P=L->next;
L->next=NULL;
//将链表一分为二
while(P)
{
q=P->next;//q指向*p的后继节点;
P->next=L->next;
L->next=P;//*p插在头节点后
P=q;
}
}