单链表的逆序

博客主要介绍了不带头节点和带头节点的单链表逆序操作,给出了执行结果。还提及链表节点的结构体定义与链表输出函数可看上一篇博客,更多单链表操作代码可参考其github库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,不带头节点的单链表逆序

int reverse(LinkList *head)          //不带头结点
{
    if(*head == NULL)
    return  -1;
    
    LinkList prevNode = *head;       //0、记录前一个节点与当前节点
    LinkList node = prevNode->next;

    while(node != NULL)              //只要当前节点存在
    {
        LinkList nextNode = node->next;  //1、先记录当前节点的后一个节点
        node->next = prevNode;  //2、让当前节点(node)的下一个节点(node->next)指向(=)前一个节点(prev)
        prevNode = node;    //3、让前一个节点指向当前节点、当前节点指向原先记录的下一个节点
        node = nextNode;
    }
    (*head)->next = NULL;   //4、让原来的第一个元素变为尾元素,尾元素的指针域置NULL
    *head = prevNode;       //5、让链表的头指针指向原来的尾元素
    
    return  0;
}



/*头插法-----------不带头节点*/
int main()
{
   int  i;
   Node *head = NULL;
   Node *tail = NULL;
   Node *new_Node = NULL;

   for(i=0;i<10;i++)
   {
      new_Node = malloc(sizeof(Node));
      new_Node->data = i+1;               
      new_Node->next = NULL;    //将即将要插入的节点打包(数据域放什么,指针域放什么)
	  
      new_Node->next = head;
      head = new_Node;

    }
    
    printf("原链表\n");	
    Output_L(head);
    reverse(&head);
    printf("反转后的链表\n");	
    Output_L(head);
}

执行结果

 

二,带头节点的单链表逆序
 

int reverse_H(LinkList *head)               //带头结点
{

    if(*head == NULL)
    return  -1;
    LinkList prevNode = (*head)->next;
    LinkList node = prevNode->next;

    while(node != NULL)
    {
        LinkList nextNode = node->next;
        node->next = prevNode;
        prevNode = node;
        node = nextNode;
    }

    (*head)->next->next = NULL;      //将头节点后一个元素的指针域置NULL
    (*head)->next = prevNode;        //让链表的头节点指向原来的尾元素
    
    return  0;
}



/*头插法-----------带头节点*/
int main()
{
   int  i;
   Node *head = NULL;
   Node *new_Node = NULL;

   head = malloc(sizeof(Node));
   head->data = -1;
   head->next = NULL;

   for(i=0;i<10;i++)
   {
       new_Node = malloc(sizeof(Node));
       new_Node->data = i+1;
       new_Node->next = NULL;

       new_Node->next = head->next;
       head->next = new_Node;	
   }
    printf("原链表\n");	
    Output_HL(head);
    reverse_H(&head);
    printf("反转后的链表\n");	
    Output_HL(head);
}

执行结果

链表节点的结构体定义与链表输出函数见我的上一篇博客https://blog.youkuaiyun.com/TAlice/article/details/82112921
关于单链表更多的操作请参考我的github库的代码https://github.com/TAlicer/supertao/blob/master/linklist/linkmid.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TAlice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值