目录

1.链表的增删查需要注意的一些易错点:

2.头插法(动态):

3.尾插法(动态):


1.链表的增删查需要注意的一些易错点:

链表增删查改超详细博客,还附带图画

https://www.cnblogs.com/yellowgg/p/8058857.html#top 

尾插法(动态创建)--视频
https://www.bilibili.com/video/BV1x7411R7pt


头插法(动态创建)--视频
https://www.bilibili.com/video/BV157411Z7dc/?spm_id_from=333.788.recommend_more_video.-1

 

  1. 对于链表的使用,要时时刻刻注意头节点,如果头节点发生变化,返回的值错误,则链表会出错。
  2. 对于新节点的插入连接,连接顺序绝对不能乱
  3. 删除节点,新增节点的话,则需要注意,是否有malloc开辟的空间被遗弃,有的话,要free掉。因为节点被遗弃成了无用节点后,内存中就多了它这个垃圾。

 

下面是从中间插入节点连接图: 

2.头插法(动态):

特点:

1.1每一次添加的新节点就是一个新的链表头。

1.2数据的遍历是从输入的最后一个读起。

#include <stdio.h>
#include <stdlib.h>

struct Link
{
	int data;
	struct Link *next;
};

void printLink(struct Link* head)
{
	struct Link* p = head;

	while(p != NULL){
		printf("%d ",p->data);
		p = p->next;
	}	
	putchar('\n');    
}

struct Link* insertFromHead(struct Link *head,struct Link *new)    //真正的插入
{  
	if(head == NULL){
		head = new;
		return head;
	}else{
		new->next = head;
		head = new;
	}	
	return head;
}

struct Link* createLink(struct Link *head)    //创建链表
{
	struct Link *new = NULL;

	while(1){
		printf("input your new node data:\n");
		new = (struct Link*)malloc(sizeof(struct Link));
		scanf("%d",&(new->data));
		if(new->data == 0){
			printf("0 quit\n");
			free(new);              //如果第一次输入数据为0,则新节点new,malloc的空间没用,则free掉
			return head;
		}
		head = insertFromHead(head,new);       
	} 
}

int main()
{

	struct Link *head = NULL;

	head = createLink(head);
    
	printLink(head);	//打印链表	

	return 0;
}

3.尾插法(动态):

特点:

1.1要先遍历到最后一个,才接新节点。

1.2数据的遍历是从输入的第一个读起。

#include <stdio.h>
#include <stdlib.h>

struct Link
{
	int data;
	struct Link *next;
};

void printLink(struct Link* head)
{
	struct Link* p = head;

	while(p != NULL){
		printf("%d ",p->data);
		p = p->next;
	}	
	putchar('\n');    
}

struct Link* insertFromBehind(struct Link *head,struct Link *new)    //真正的插入
{ 
	struct Link *p = head; 
    if(p == NULL){
        head = new;
        return head;
    }
    while(p! =NULL){    
        p = p->next;
    }
    p->next = new;
    
    return head;
}

struct Link* createLink(struct Link *head)    //创建链表
{
	struct Link *new = NULL;

	while(1){
		printf("input your new node data:\n");
		new = (struct Link*)malloc(sizeof(struct Link));
		scanf("%d",&(new->data));
		if(new->data == 0){
			printf("0 quit\n");
			free(new);            //如果第一次输入数据为0,则新节点new,malloc的空间没用,则free掉
			return head;
		}
		head = insertFromBehind(head,new);       
	} 
}

int main()
{

	struct Link *head = NULL;

	head = createLink(head);
    
	printLink(head);	//打印链表

	return 0;
}


 

 

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐