1. 程式人生 > >C 連結串列中從第s節點到第e節點的逆置

C 連結串列中從第s節點到第e節點的逆置

//結構體
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; }