剑指offer:反转链表

来源:互联网 发布:如何做一名程序员 编辑:程序博客网 时间:2024/06/05 01:01

题目描述

输入一个链表,反转链表后,输出链表的所有元素。

方法1:用ArrayList

遍历节点存入list中,然后遍历从后输出其节点。

【运行时间:17ms  占用内存:8660k】

import java.util.ArrayList;/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {    public ListNode ReverseList(ListNode head) {        ArrayList<Integer> list=new ArrayList<Integer>();        if(head==null)return null;ListNode node=new ListNode(-1);        ListNode resNode=node;        while(head!=null){            list.add(head.val);            head=head.next;        }        for(int i=list.size()-1;i>=0;i--){            node.next=new ListNode(list.get(i));            node=node.next;        }        return resNode.next;    }} 

方法2:依次交换位置

【运行时间:23ms  占用内存:8664k】

public class Solution {    public ListNode ReverseList(ListNode head) {ListNode pre=null;        ListNode next=null;                while(head!=null){            next=head.next;            head.next=pre;            pre=head;            head=next;        }        return pre;    }}

方法3:递归

【运行时间:21ms  占用内存:8532k】

/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {    public ListNode ReverseList(ListNode head) {if(head==null||head.next==null)return head;        ListNode pre=ReverseList(head.next);        head.next.next=head;        head.next=null;        return pre;    }}

方法4:用栈来实现

【运行时间:26ms  占用内存:8516k】

import java.util.*;public class Solution {    public ListNode ReverseList(ListNode head) {Stack<ListNode> stack=new Stack<ListNode>();        if(head==null)return head;        while(head!=null){            stack.push(head);            head=head.next;        }        ListNode node=new ListNode(-1);        ListNode n=node;        while(!stack.isEmpty()){            n.next=new ListNode(stack.pop().val);            n=n.next;        }        return node.next;    }}


原创粉丝点击