2-5 单链表基本操作(3)— 清空单链表

【补充算法3】清空单链表:

链表依然存在(头结点和头指针依然存在),但链表中无元素,成为空链表

算法思路:依次释放头结点指向的首元结点之后的所有结点。

算法结束条件:p==NULL; 循环条件:p!=Null;

代码:

Status ClearList(LinkList &L) {
	LNode *p,*q;
	p = L->next;
	while(p) {
		q = p->next;
		free(p);
		p = q;
	}
	L->next = NULL;
	return OK;
}

2-5 单链表基本操作(4):获取链表长度

算法思路:从首元结点开始(不要包括头结点),依次计数所有结点

代码:

int ListLength_L(LinkList L) {
	LNode *p;
	p = L ->next;
	int i = 0;
	while(p) {
		p = p -> next;
		i++;
	}
	return i;
}

2-5 单链表基本操作(5):获取i位置元素

算法思路:从链表的头指针出发,顺着链表逐个结点往下搜索,直到搜索到第i个结点为止

可以看出,链表不是随机存储结构

算法步骤:

  1. 从第一个结点(L→next)顺链扫描,用指针p指向当前扫描到的结点,p初值为p=L→next
  2. j做计数器,累计当前扫描过的结点数,j初值为1