链表|遍历|插入|

原创 2011年10月23日 18:18:37

参考资料 LinkedListBasics.pdf

一、遍历

当遍历一个链表时,测试条件为current!=NULL,移动步骤为current=current->next 。

int Length(struct node* head)
{
	printf("---- iterate list ----\n");
	int count = 0;
	struct node* current = head;
	while(current != NULL)
	{
		printf("data =%d ;\n",current->data);
		count ++;
		current = current->next;
	}
	return count;
}

二、从Head后插入

最简单的方法是在头节点的末尾插入节点,但是它的插入顺序跟它的排列顺序刚好相反。呵呵,如果你不介意的话,这个不失为一种简单易行的方法。

void Push(struct node** headRef, int data){
	struct node* newNode = (struct node*)malloc(sizeof(struct node));
	newNode->data = data;
	newNode->next = *headRef;
	*headRef = newNode;
}

struct node* AddAtHead() {
struct node* head = NULL;
int i;
for (i=1; i<6; i++) {
Push(&head, i);
}
// head == {5, 4, 3, 2, 1};
return(head);
}

三、从链表末尾插入

先要找到末尾的节点~

void PushTail(struct node** headRef, int data){

	struct node* newNode = (struct node*)malloc(sizeof(struct node));
	newNode->data = data;
	newNode->next = NULL;
	//special case for lenght 0
	if(tail == NULL)
	{
		printf("tail == NULL");
		*headRef = newNode;
	}
	else
	{
		struct node* tail = *headRef;
		// Locate the last node
		while(tail->next != NULL)
		{
			tail = tail->next;
		}
		tail->next = newNode;
	}
}


四、注意:“指针的拷贝” 和 “指针的指针”

指针的拷贝:void PushHead(struct node* headRef, int data) 这样插入节点,对原链表无任何影响。

指针的指针:void PushHead(struct node** headRef, int data)





java实现单链表,功能有插入,删除,遍历。

public class Code {private int data;private Code next;public int getData() { return data;}public voi...
  • raindew1985
  • raindew1985
  • 2007年06月27日 02:12
  • 3037

c++ 链表操作:添加、遍历、删除、查找

链表是一种动态数据结构,因为在创建链表的时候,无需知道链表的长度。链表的每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 struct node { int ...
  • yes1cpp
  • yes1cpp
  • 2014年02月09日 17:32
  • 5277

数据结构学习二 数据结构之链表图解版【创建,遍历,删除,插入】

图解链表:● 建立动态链表 待插入的结点p1数据部分初始化,该结点被头结点head、尾结点p2同时指向 1.任务是开辟结点和输入数据 2.并建立前后相链的关系p1重复申请待插入结点空间,对该结点...
  • shengmingqijiquan
  • shengmingqijiquan
  • 2016年07月29日 22:41
  • 756

数据结构——单链表的创建、删除、遍历以及节点的插入、删除等操作

1、创建一个结构体:创建一个包含自身结构的结构体,该结构体包含一个数据域和指针域 1、链表初始化:在链表的初始化过程中要为一个结点用malloc函数分配一个空间,并且时next指针指向一个NULL,...
  • banburenshseng
  • banburenshseng
  • 2017年02月08日 16:29
  • 872

单链表的倒序

单链表的翻转是一道很基本的算法题。         方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。         方法2:使用三个指针遍历单链表,逐个链接点进行反转。 ...
  • Evan123mg
  • Evan123mg
  • 2015年05月14日 19:52
  • 2183

单链表的创建、遍历、插入、删除、查找、逆转

#include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始...
  • shuangshuang37278752
  • shuangshuang37278752
  • 2013年09月09日 10:31
  • 1008

链表的一系列操作(创建,插入,删除,从前到后,从后到前遍历整个链表)

众所周知,链表是被面试提及最频繁的数据结构,链表的结构简单,它由指针把若干个结点链接成链状结构: 1.链表的创建,插入和删除操作 (1)定义头文件List.h struct ListNode {   ...
  • u012017783
  • u012017783
  • 2016年11月28日 19:45
  • 466

关于链表的插入效率

百度链表和顺序表的插入效率问题,总是说链表优于顺序表 ........汗 链表插入删除的效率优于顺序表是有条件的:它不是单向链表 单向链表 如果你不知道要插入位置的元素的地址,那么它和顺序表的...
  • dianbolan
  • dianbolan
  • 2017年02月28日 16:51
  • 170

(补充实验方法) linux内核链表之实例 这个例子包括简单的增、删、遍历

linux内核链表之实例 + 实验  参考:http://blog.csdn.net/lufeiop02/article/details/6526382 基本知识可以看这个网址 深入分析 L...
  • wenhui_
  • wenhui_
  • 2011年09月17日 12:02
  • 1984

链表,遍历链表,结构体指针

文章:http://blog.csdn.net/lionpku/article/details/44278803 的链表版本。 代码如下: #include using namespace st...
  • lionpku
  • lionpku
  • 2015年03月17日 17:01
  • 442
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表|遍历|插入|
举报原因:
原因补充:

(最多只允许输入30个字)