头插法
#include <iostream>
#include <bits/stdc++.h>
#include "stdlib.h"
void _for(int i, int i1, int sz);
using namespace std;
//头插法
typedef struct Lnode{//单链表结点类型
int data;//指针域
struct Lnode *next;//数据域
}Lnode,*LinkList;
void list_head_insert(LinkList &L)
//void list_head_insert( Lnode* &L){// same
{//为头结点申请空间,头指针指向头结点== L= (Lnode*)malloc(sizeof (Lnode));
L= (LinkList)malloc(sizeof (Lnode));
int x; L->next=NULL;
scanf("%d",&x);
Lnode *s;
while (x!=9999)
{
s= (LinkList)malloc(sizeof (Lnode));
s->data=x;
s->next=L->next;//s的next指向之前链表的第一个结点
L->next=s;//头结点的next
scanf("%d",&x);
}
}
void print(LinkList L)
{
L=L->next;
while (L!=NULL){
printf("%3d\n",L->data);
L=L->next;}
}
int main(){
LinkList L;//l是链表头指针,是结构体指针类型
list_head_insert(L);
print(L);
return 0;
}
尾插法(有个不一样的地方就是多了一个尾指针r指向链表的尾部,为什么不一个个遍历呢,因为时间复杂度太高了)
void list_tail_insert(LinkList &L)
//void list_head_insert( Lnode* &L){// same
{//为头结点申请空间,头指针指向头结点== L= (Lnode*)malloc(sizeof (Lnode));
L= (LinkList)malloc(sizeof (Lnode));
int x;
L->next=NULL;
scanf("%d",&x);
Lnode *s,*r;//s指向新节点 r是尾节点
while (x!=9999)
{
s= (LinkList)malloc(sizeof (Lnode));
s->data=x;
r->next=s;//始终保持在最后面
r=s;
scanf("%d",&x);
}
r,s在最开始的时候是指向L的