行业资讯
📅 2026/8/15 19:03:59
23 翻转链表
给你单链表的头节点head请你反转链表并返回反转后的链表。示例 1输入head [1,2,3,4,5]输出[5,4,3,2,1]示例 2输入head [1,2]输出[2,1]示例 3输入head []输出[]提示链表中节点的数目范围是[0, 5000]-5000 Node.val 5000进阶链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题思路1循环反转1、使用循环的方式反转链表2、先记住当前节点和下一个节点记为curNode和nextNode反转后的头指针pRevNodeNULL;3、curNode-next 指向pRevNode4、pRevNode指向curNode5、curNode指向nextNode6、nextNode指向nextNode-next7、nextNode-nextNULL时退出循环结束。class Solution { public: ListNode* reverseList(ListNode* head) { if(!head||!head-next) return head; ListNode* pMoveNhead-next; ListNode* newNodenullptr; ListNode* pMovehead; while(pMove){ pMove-nextnewNode; newNodepMove; pMovepMoveN; if(pMoveN) pMoveNpMoveN-next; } return newNode; } };注意不能直接返回函数函数的参数的head必须要返回函数的返回值。因为函数参数用的是一级指针一级指针做函数的参数时无法改变指针的指向需要用二级指针。ListNode* reverseNode(ListNode* head,ListNode* node){ if(NULLnode) return head; ListNode* nextNodenode-next; node-nexthead; headnode; ListNode* pModereverseNode(head,nextNode); return pMode; } ListNode* reverseList(ListNode* head) { ListNode* pMoveNULL; return reverseNode(pMove,head); }推荐一个零声教育学习教程个人觉得老师讲得不错分享给大家[LinuxNginxZeroMQMySQLRedisfastdfsMongoDBZK流媒体CDNP2PK8SDockerTCP/IP协程DPDK等技术内容点击立即学习:链表