已知链表的头结点head,写一个函数把这个链表逆序

本文介绍如何通过设置前后相邻的指针p和q实现链表的逆序操作。当链表为空或只有一个元素时直接返回,然后逐步调整节点的后继关系,直至完成逆序。最后调整链表头和链表尾,确保逆序正确。
摘要由CSDN通过智能技术生成
Node * ReverseList(Node *head) //链表逆序
{
if ( head == NULL || head->next == NULL )
return head;
Node *p1 = head ;
Node *p2 = p1->next ;
Node *p3 = p2->next ;
p1->next = NULL ;
while ( p3 != NULL )
{
p2->next = p1 ;
p1 = p2 ;
p2 = p3 ;
p3 = p3->next ;
}
p2->next = p1 ;
head = p2 ;
return head ;
}


上述代买有问题,不能实现整个的逆序;

思路应该为: 

若链表为空或只有一个元素,则直接返回;

  2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;

  3). 重复2),直到q为空

  4). 调整链表头和链表尾


#include <stdio.h>  
#include <stdlib.h>  
  
typedef struct tagListNode{  
    int data;  
    struct tagListNode* next;  
}ListNode, *List;  
  
void PrintList(List head);  
List ReverseList(List head);  
  
int main()  
{  
    //分配链表头结点  
    ListNode *head;  
    head = (List
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值