C 連結串列中從第s節點到第e節點的逆置
阿新 • • 發佈:2018-11-01
//結構體
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;
}