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

复制代码
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是有序区最后一个节点
相关推荐
じòぴé南冸じょうげん1 小时前
若依框架favicon.ico缓存更新问题解决方案:本地生效但线上未更新
前端·javascript·前端框架·html
RoboWizard1 小时前
高性能电脑热战寒冬 11月DIY配置推荐
linux·运维·服务器·电脑·金士顿
狮子座的男孩1 小时前
js基础高级:01、数据类型(typeof、instanceof、===的使用)、数据与变量与内存(定义、赋值与内存关系、引用变量赋值、js调函数传参)
前端·javascript·经验分享·数据类型·数据与变量与内存·赋值与内存关系·引用变量赋值
星释4 小时前
Rust 练习册 57:阿特巴什密码与字符映射技术
服务器·算法·rust
Cyclo-4 小时前
PDFJS 在React中的引入 使用组件打开文件流PDF
前端·react.js·pdf
向着光芒的女孩5 小时前
【IDEA】关不了的Proxy Authentication弹框探索过程
java·ide·intellij-idea
Filotimo_6 小时前
Spring Boot 整合 JdbcTemplate(持久层)
java·spring boot·后端
李慕婉学姐6 小时前
【开题答辩过程】以《“饭否”食材搭配指南小程序的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring·小程序
椒盐螺丝钉6 小时前
Vue Router应用:组件跳转
前端·javascript·vue.js
顾安r6 小时前
11.20 开源APP
服务器·前端·javascript·python·css3