单链表的创建

单链表的创建

  1.单链表的定义

1
2
3
4
5
6
7
8
9
10
11
typedef struct listNode//定义链表结构体
{
    int data;
    struct listNode* next;
    int length;
}listNode , *LinkList;
void init(LinkList& l)//初始化链表
{
    l = (LinkList)malloc(sizeof(listNode*));
    l->next = nullptr;
}

  2.头插法构建单链表

1
2
3
4
5
6
7
8
9
void create_LinkList_head(LinkList& l, const int x)//头插法创建链表
{
    listNode* new_node;
    new_node = (listNode*)malloc(sizeof(listNode));
    new_node->next = l->next;
    l->next = new_node;
    new_node->data = x;
    l->length++;
}

  3.尾插法构建单链表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void create_LinkList_tail(LinkList& l, const int x)//尾插法创建链表
{
    listNode* new_node;
    listNode* tail_node;
    new_node = (listNode*)malloc(sizeof(listNode));
    tail_node = l;
    while (tail_node->next)
    {
        tail_node = tail_node->next;
    }
    new_node->data = x;
    new_node->next = nullptr;
    tail_node->next = new_node;
    l->length++;
}

  4.在指定位置插入元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void insert_x_pos(LinkList& l, const int x,  int pos)//在链表的指定位置插入元素
{
    listNode* now_node;
    listNode* new_node;
    new_node = (listNode*)malloc(sizeof(listNode));
    new_node->data = x;
    now_node = l;
    while (pos-- > 1)
    {
        now_node = now_node->next;
    }
    new_node->next = now_node->next;
    now_node->next = new_node;
    l->length++;
}

  

  5.删除某个位置的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int delete_pos(LinkList& l, const int pos)//删除某个位置的元素
{
    listNode* tem_node;
    listNode* del_node;
    tem_node = l;
    int elem;
    for(int x = 1; x < pos; x++)
    {
        tem_node = tem_node->next;
    }
    elem = tem_node->next->data;
    del_node = tem_node->next;
    tem_node->next = tem_node->next->next;
    free(del_node);
    l->length--;
    return elem;
}

  6.更改某个位置的元素

1
2
3
4
5
6
7
8
9
10
void update_x_pos(LinkList& l, const int x, const int pos)//改变某个位置的元素
{
    listNode* tem_node;
    tem_node = l;
    for(int i = 1; i < pos; i++)
    {
        tem_node = tem_node->next;
    }
    tem_node->next->data = x;
}

  7.查找某个位置的元素

1
2
3
4
5
6
7
8
9
10
int find_pos(LinkList& l, const int pos)//查找某个位置的元素
{
    listNode* tem_node;
    tem_node = l;
    for(int i = 1; i < pos; i++)
    {
        tem_node = tem_node->next;
    }
    return tem_node->next->data;
}

  8.打印链表

1
2
3
4
5
6
7
8
9
10
11
void print_LinkList(LinkList& l)//打印链表
{
    listNode* now_node;
    now_node = l;
    while(now_node->next)
    {
        std::cout<<now_node->next->data<<" ";
        now_node = now_node->next;
    }
    std::cout<<std::endl;
}

  9.获取链表的长度

1
2
3
4
int get_lenght(const LinkList&l)
{
    return l->length;
}

  完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//list_with_pointer.h
#ifndef _LIST_WITH_POINTER_
#define _LIST_WITH_POINTER_
#include<malloc.h>
typedef struct listNode//定义链表结构体
{
    int data;
    struct listNode* next;
    int length;
}listNode , *LinkList;
void init(LinkList& l)//初始化链表
{
    l = (LinkList)malloc(sizeof(listNode*));
    l->next = nullptr;
}
void create_LinkList_head(LinkList& l, const int x)//头插法创建链表
{
    listNode* new_node;
    new_node = (listNode*)malloc(sizeof(listNode));
    new_node->next = l->next;
    l->next = new_node;
    new_node->data = x;
    l->length++;
}
void create_LinkList_tail(LinkList& l, const int x)//尾插法创建链表
{
    listNode* new_node;
    listNode* tail_node;
    new_node = (listNode*)malloc(sizeof(listNode));
    tail_node = l;
    while (tail_node->next)
    {
        tail_node = tail_node->next;
    }
    new_node->data = x;
    new_node->next = nullptr;
    tail_node->next = new_node;
    l->length++;
}
void insert_x_pos(LinkList& l, const int x,  int pos)//在链表的指定位置插入元素
{
    listNode* now_node;
    listNode* new_node;
    new_node = (listNode*)malloc(sizeof(listNode));
    new_node->data = x;
    now_node = l;
    while (pos-- > 1)
    {
        now_node = now_node->next;
    }
    new_node->next = now_node->next;
    now_node->next = new_node;
    l->length++;
}
int delete_pos(LinkList& l, const int pos)//删除某个位置的元素
{
    listNode* tem_node;
    listNode* del_node;
    tem_node = l;
    int elem;
    for(int x = 1; x < pos; x++)
    {
        tem_node = tem_node->next;
    }
    elem = tem_node->next->data;
    del_node = tem_node->next;
    tem_node->next = tem_node->next->next;
    free(del_node);
    l->length--;
    return elem;
}
void update_x_pos(LinkList& l, const int x, const int pos)//改变某个位置的元素
{
    listNode* tem_node;
    tem_node = l;
    for(int i = 1; i < pos; i++)
    {
        tem_node = tem_node->next;
    }
    tem_node->next->data = x;
}
int find_pos(LinkList& l, const int pos)//查找某个位置的元素
{
    listNode* tem_node;
    tem_node = l;
    for(int i = 1; i < pos; i++)
    {
        tem_node = tem_node->next;
    }
    return tem_node->next->data;
}
void print_LinkList(LinkList& l)//打印链表
{
    listNode* now_node;
    now_node = l;
    while(now_node->next)
    {
        std::cout<<now_node->next->data<<" ";
        now_node = now_node->next;
    }
    std::cout<<std::endl;
}
int get_lenght(const LinkList&l)
{
    return l->length;
}
#endif

 //list_with_pointer.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<em id="__mceDel">#include<iostream>
#include"list_with_pointer.h"
using namespace std;
void test(LinkList& l)
{
    init(l);
    int x;
    cout<<"请输入你想插入的元素(int):";
    cin>>x;
    while (x != -1)
    {
        create_LinkList_head(l, x);//头插法创建
        //create_LinkList_tail(l, x)尾插法创建
        cout<<"请输入你想插入的元素(int):";
        cin>>x;
    }
    cout<<"链表中的元素:";
    print_LinkList(l);
    int insert_x, insert_pos;
    cout<<"请输你想插入的元素(int)和位置([1,l.length+1])";
    cin>>insert_x>>insert_pos;
    insert_x_pos(l, insert_x, insert_pos);
    cout<<"在第"<<insert_pos<<"个位置插入"<<insert_x<<"后链表中的元素:";
    print_LinkList(l);
    int delete_x, pos;
    cout<<"你想删除第几个位置([1,l.length]):";
    cin>>pos;
    delete_x = delete_pos(l, pos);
    cout<<"删除该位置的元素后,链表中的元素:";
    print_LinkList(l);
    int updata_x, updata_pos;
    cout<<"请输入想更新的元素(int)和它所在的位置([1,l.length]):";
    cin>>updata_x>>updata_pos;
    update_x_pos(l, updata_x, updata_pos);
    cout<<"更新后链表中的元素:";
    print_LinkList(l);
    int pos_find;
    cout<<"你想查找第几个元素([1,l.lenght]):";
    cin>>pos_find;
    cout<<"该位置的元素为:"<<find_pos(l, pos_find)<<endl;
}
int main()
{
    LinkList l;<br>   test(l);
    return 0;
}
</em>

  

void create_LinkList_tail(LinkList& l, const int x)//尾插法创建链表
{
    listNode* new_node;
    listNode* tail_node;
    new_node = (listNode*)malloc(sizeof(listNode));
    tail_node = l;
    while (tail_node->next)
    {
        tail_node = tail_node->next;
    }
    new_node->data = x;
    new_node->next = nullptr;
    tail_node->next = new_node;
    l->length++;
}
posted @   孤峪  阅读(250)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示