欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}
相关标签: 单链表