C 链表中从第s节点到第e节点的逆置

xiaoxiao2025-09-03  242

//结构体 typedef struct Node { ElementType data; struct Node * next; } LNode, * LinkNode; //逆置从i到m个节点的串 Status reversFromstoe(LinkNode *L, int s, int e){ if(!(*L)->next) return ERR; LinkNode p1 = (*L); //要逆置的话,首先要找出第s个结点的前驱,和第s个结点,以及第e个结点 LinkNode SNode = NULL, ENode = NULL, PreSNode = NULL; int n = 0; while (p1->next) { //先找到第s个节点的前驱节点 if(n == s-1){ PreSNode = p1; SNode = PreSNode->next; } //然后再找到第e个节点,找到之时即为跳出之日 else if(n == e) { ENode = p1; break; } p1 = p1->next; n++; } //再次确认下是不是真的找到了 if(!SNode || !ENode){ return ERR; } //将原来链表中的第s-1个节点和第e+1个节点相连 PreSNode->next = ENode->next; //独立出来的子串就是SNode到ENode了 ENode->next = NULL; //遍历独立出来的子串,将其按头插法插入到原来第s-1个节点后面 while (SNode) { //准备工作 LinkNode Temp = SNode; SNode = SNode->next; //头插法 Temp->next = PreSNode->next; PreSNode->next = Temp; } return OK; }
转载请注明原文地址: https://www.6miu.com/read-5035698.html

最新回复(0)