1. 先创建一个头结点,不需要有数据域,头结点的next指向null
2.循环中创建结点,把头结点的next赋值给 新结点的next,相当于新结点的next指向了(头结点next所指向的)
3.把新结点赋值给头结点的next ,相当于头结点的next指向了新结点,这样就串起来了
4.头结点就相当于整个链表
5.循环遍历的时候,头结点没有数据可以直接跳过,把结点的next赋值给结点,相当于向下移动了一项
c语言版:
代码语言:javascript复制#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node{
char* data;
struct Node* next;
} Node;
typedef Node* LinkList;
int main(){
//1.创建一个链表
LinkList head=(LinkList)malloc(sizeof(Node));//分配内存
//malloc(sizeof(Node))是给头结点分配内存,head是指向头结点的指针叫头指针
head->next=NULL;//数据域加指针域叫头结点
LinkList a1=(LinkList)malloc(sizeof(Node));
a1->data="aaa";
a1->next=NULL;
head->next=a1;
//a1是指向第一个结点的指针,赋值给head->next,就相当于head->next指向了a1
LinkList a2=(LinkList)malloc(sizeof(Node));
a2->data="bbb";
a2->next=NULL;
a1->next=a2;
//a2是指向第二个结点的指针,赋值给a1->next,就相当于a1->next指向了a2
//2.循环创建一个链表
LinkList list=(LinkList)malloc(sizeof(Node));
list->next=NULL;
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;
node->next=list->next;
list->next=node;
}
//遍历
int j=0;
while(list->next){
list=list->next;
printf("%s n",list->data);
j ;
}
return 0;
}
go语言版:
代码语言:javascript复制package main
import(
"fmt"
)
type Node struct{
data string
next *Node
}
func main(){
list:=new(Node)
list.next=nil
var node *Node
for i:=0;i<10;i {
node=new(Node)
node.data="aaa" fmt.Sprintf("%d",i)
node.next=list.next
list.next=node
}
//遍历
for{
list=list.next
fmt.Println(list.data)
if list.next==nil{
break
}
}
}
php语言版:
代码语言:javascript复制<?php
class Node{
public $data;
public $next;
}
$list=new Node();
$list->next=null;
for($i=0;$i<10;$i ){
$node=new Node();
$node->data="aaa{$i}";
$node->next=$list->next;
$list->next=$node;
}
//遍历
while($list->next){
$list=$list->next;
echo $list->data."n";
}