C 链表中从第s节点到第e节点的逆置
程序员文章站
2024-03-21 13:14:58
...
//结构体
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;
}
推荐阅读