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

复制代码
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是有序区最后一个节点
相关推荐
CoderYanger28 分钟前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
CQU_JIAKE3 小时前
11.7[高体】
java·后端·spring
apcipot_rain4 小时前
C++转Java日记(04)
java·开发语言·c++
红尘散仙4 小时前
谁说终端只能敲键盘?我用 Rust 给小说阅读器加上了鼠标
前端·后端·rust
特立独行的猫A4 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
陈随易5 小时前
C++26 草案被否,二十八年来头一回
前端·后端·程序员
ZhengEnCi5 小时前
Agent 工具怎么折叠海量输出才「爽」:Trae、Claude Code 的渐进式披露设计原理
前端·agent
憧憬成为java架构高手的小白6 小时前
LangGraph4j 实战(下)
java
天诰6 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
陈希1238 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器