[数据结构]无头循环单链表将P节点的前驱变为P的后继节点

问题描述

假设循环单链表不空, 且无表头节点无表头指针, 指针P指向链表中某节点。请设计一个算法,将P所指向节点的前驱变为P所指节点的后继节点。

Solution

此问题也可以看作交换p与p的后继节点位置
找到三个指针即可

p
pp:p的前驱
ppp:p的前驱的前驱

void exchangeNode(Node p) {
    
    
	// 如果只有一个或者两个节点直接退出 
	if (p->next->next == p) {
    
    
		return;
	} 
	Node ppp = p, pp = p->next;
	//  找到 pp,ppp 
	while (ppp->next->next != p) {
    
    
		ppp = ppp->next;
		pp = pp->next;
	}
	// 交换节点 
	pp->next = p->next;
	ppp->next = p;
	p->next = pp; 
} 

节点断开以及连接顺序如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39906884/article/details/109807758