[日常] 算法-单链表的创建-尾插法

1.创建头结点,头结点的next指向null

2.把头结点赋值给一个中间变量

3.循环中创建结点, 中间变量的next指向新结点

4.新结点覆盖中间变量

c语言版:

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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node{
        char* data;
        struct Node* next;
} Node;
typedef Node* LinkList;
int main(){
        //指针所占字节与系统有关,一般32位系统,一个指针占4个字节
        printf("%d\n",sizeof(Node));//输出 4+4=8
        //头结点
        LinkList head=(LinkList)malloc(sizeof(Node));
        //第一个结点
        Node* node1=(Node*)malloc(sizeof(Node));
        node1->data="aaa";
        node1->next=NULL;
 
        //第二个结点
        Node* node2=(Node*)malloc(sizeof(Node));
        node2->data="bbb";
        node2->next=NULL;
 
        head->next=node1;
        node1->next=node2;
 
        //遍历
        while(head->next){
                head=head->next;
                printf("%s\n",head->data);
        }  
 
        //2.尾插法
        LinkList list=(LinkList)malloc(sizeof(Node));
        list->next=NULL;
        LinkList temp=list;//中间过渡
        for(int i=0;i<10;i++){
                LinkList node=(LinkList)malloc(sizeof(Node));
 
                char* str=(char*)malloc(4);//给字符串分配内存
                sprintf(str,"aaa%d",i);
                node->data=str;
                temp->next=node;
                temp=node;//循环的时候,每次覆盖成最新的结点
        }  
 
        //遍历
        while(list->next){
                list=list->next;
                printf("%s\n",list->data);
        }  
}

go语言版:

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
package main
 
import(
        "fmt"
)
 
type Node struct{
        data string
        next *Node
}
type LinkList *Node
func main(){
        list:=new(Node)
        list.next=nil
        var node LinkList
        temp:=list
        for i:=0;i<10;i++{
                node=new(Node)
                node.data="aaa"+fmt.Sprintf("%d",i)
                node.next=nil
                temp.next=node
                temp=node
        }  
 
        //遍历
        for{
                list=list.next
                fmt.Println(list.data)
                if list.next==nil{
                        break
                }  
        }  
}

php语言版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class Node{
        public $data;
        public $next;
}
//尾插法
$list=new Node();
$list->next=null;
$temp=$list;
for($i=0;$i<10;$i++){
        $node=new Node();
        $node->data="aaa{$i}";
        $node->next=null;
        $temp->next=$node;
        $temp=$node;
}
 
//遍历
while($list->next){
        $list=$list->next;
        echo $list->data."\n";
}

  

  

  

posted @   唯一客服系统开发笔记  阅读(617)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2016-06-11 [javaSE] GUI(鼠标事件)
2016-06-11 [javaSE] 网络编程(TCP-并发上传图片)
点击右上角即可分享
微信分享提示
1
chat with us