深入理解单链表检查指针和跟踪指针

复制代码
Status PriorElem(LinkList L, ElemType cur_e, ElemType &pre_e)
{  
  LinkList q, p=L->next; 
  while(p && p->next) 
  { q=p->next; 
    if(q->data==cur_e) 
    { pre_e=p->data; 
      return OK; 
    }
    p=q; 
  }
  return ERROR; 
}
Status NextElem(LinkList L, ElemType cur_e, ElemType &next_e)
{ 
  
  LinkList p=L->next; 
  while(p && p->next) 
  { if(p->data==cur_e) 
    { next_e=p->next->data; 
      return OK; 
    }
    p=p->next; 
  }
  return ERROR; 
}

高一凡代码

下面比较csdn上链式存储直接插入排序中pre指针使用

复制代码
void zhijiecharusort(LinkList& l)//直接插入排序
{// 使用指针p先保存下L中未排序元素(无序区中)的信息
	 使用指针p先保存下L中未排序元素(无序区中)的信息
	LinkList p = l->next->next;//第一个节点有序
	l->next->next = NULL;
	// 由于为了构造有序区,已经将待排序元素的第一个元素放在有序区中了,
 
	// 所以从第二个元素开始遍历,也就是p = L->next->next。 
	while (p)//p指向无序区
	{
		// 每循环一次p后移一位,直至p == NULL.
	// 进行插入有序区的操作时会改变p->next的值所以需要选保存一下
		LinkList q = p->next;
		// 为方便比较,用一个指针pre,指向有序区。(重点)
		LinkList pre = l;//为什么不能等于l->next
			// 遍历有序区中的所有元素,直至有序区末尾或者找到:
	// p所指的元素 大于 pre的next所指的元素为止,
		while (pre->next != NULL && pre->next->data < p->data)//pre->next->data < p->data一旦不符合这个条件就成:pre->data < p->data&&pre->next->data > p->data
			pre = pre->next;                                  //pre->next == NULL跳出循环,即pre是有序区最后一个节点
 
		// 找到比p大的节点后,执行插入操作,因为插入操作需要用到
	// 被插入节点的前驱节点,所以在比较时,用了pre->next来和p比较
		p->next = pre->next;
		pre->next = p;
		// 用q把p的值恢复过来,使得循环继续指向无序区的下一个节点
		p = q;//往后移动1位因为:LinkList q = p->next;
	}
}

LinkList pre = l;//为什么不能等于l->next
// 遍历有序区中的所有元素,直至有序区末尾或者找到:
// p所指的元素 大于 pre的next所指的元素为止,
while (pre->next != NULL && pre->next->data < p->data)//pre->next->data < p->data一旦不符合这个条件就成:pre->data < p->data&&pre->next->data > p->data
			pre = pre->next;                                  //pre->next == NULL跳出循环,即pre是有序区最后一个节点
相关推荐
mldong6 小时前
一个 App,十三套后端:手机审批端 uni-jeeflow-app 开源了
java·架构
tqs_123457 小时前
MySQL RR隔离级别死锁|Gap间隙锁、临键锁,订单并发范围查询死锁根因方案
java
逆境不可逃7 小时前
Pi Agent 学习笔记:多个工具怎样并行执行
java
尾善爱看海7 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
Flynt8 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet8 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
驳是8 小时前
一个组件,提升 react-router 开发的幸福感
前端·preact
GreenTea8 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
星云API技术支持8 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
niucloud-admin8 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github