剑指offer之反转链表(C++/Java双重实现)

   日期:2020-07-03     浏览:86    评论:0    
核心提示:1.题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 50002.问题分析其实倒不是很难,我们只需要两遍遍历即可,第一遍遍历把链表中所有信息域存入数组,下标为0存储第一个结点的数据域,下标为1的存储第二个结点的数据域,依次类推。第二遍遍历我们从头结点开始,

1.题目描述

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000

2.问题分析

其实倒不是很难,我们只需要两遍遍历即可,第一遍遍历把链表中所有信息域存入数组,下标为0存储第一个结点的数据域,下标为1的存储第二个结点的数据域,依次类推。第二遍遍历我们从头结点开始,头结点的数据域换成数组最后一个位置的数据,把第二个结点的数据换成数组倒数第二个位置的数据,这样就实现了链表的倒置

3.代码实现

3.1C++代码

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
       ListNode* cur=head;
       int arr[5005];//存放链表数据域
       int cnt=0;//用于记录数组个数
       while(cur)//第一次遍历
       {
          arr[cnt++]=cur->val;
          cur=cur->next;
       }
       cur=head;
       while(cur)//第二次遍历
       {
           cur->val=arr[--cnt];
           cur=cur->next;
       }
       return head;
    }
};
3.2Java代码

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur=head;
       int arr[]=new int[50005];
       int cnt=0;
       while(cur!=null)
       {
          arr[cnt++]=cur.val;
          cur=cur.next;
       }
       cur=head;
       while(cur!=null)
       {
           cur.val=arr[--cnt];
           cur=cur.next;
       }
       return head;
    }
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服