有头单链表逆序操作

发布于:2022-10-21 ⋅ 阅读:(344) ⋅ 点赞:(0)

typedef int data_t;
typedef struct linklist
{
    data_t data;
    struct linklist *next;
}Linklist;                                //全局变量结构体定义

void Linklist_nixu(Linklist *head)
{
    Linklist *p = head->next;          //指向原表中首元素的指针
    Linklist *node = head->next;    //搜寻表尾的指针
    Linklist *q = NULL;
    Linklist *temp = head;
    while(p->next != NULL)      //原表首元素的下一个节点为NULL时停止循环(原首元素到表尾)
    {
        while(node->next != NULL)   //node搜寻到表尾停止循环
        {
            q = node;             //q跟随node,每次循环结束指向node的前一位
            node = node->next;    //循环向后寻找表尾
        }
        Linklist_insert_headnode(temp,node);//自定义的节点插入函数,在temp后插入寻找到的结尾
        q->next = NULL;//将q所指向的节点的next赋空作为新结尾
        q = NULL;          //重置q指针(或许没有必要)
        node = temp->next;    //node从头并跳过已经完成重排的元素开始遍历
        temp = temp->next;    //temp指针向后偏移
    }
    return;
}

void Linklist_insert_headnode(Linklist *head,Linklist *node)
{
    if(node == NULL)
    {
        return;
    }
    node->next = head->next;
    head->next = node;
    return;
}                                          //节点插入函数,将指定节点node插入到指定节点head节点之后


网站公告

今日签到

点亮在社区的每一天
去签到