剑指offer——反转链表

来源:互联网 发布:海岛骑兵医师升级数据 编辑:程序博客网 时间:2024/05/22 17:20

/*思路:
想办法将链表的节点按照顺序存储在有序集合里,再逆序遍历反转指向即可,注意第一个元素的指向原本是指向第二个元素,逆序反转时要改成指向null。

此处用了栈更加方便,直接将链表的元素依次压栈,再将栈中元素依次弹出,弹出过程,将每一个之前弹出的元素的next置为当前弹出的元素,最后一个元素置null即可。

*/

import java.util.ArrayList;import java.util.Stack;//输入一个链表,反转链表后,输出链表的所有元素。public class 反转链表{     public static ListNode ReverseList(ListNode head) {         //至少有一个结点         if(head==null)             return null;         Stack<ListNode> linkList=new Stack<ListNode>();         ListNode listNode=head;        while(listNode!=null){            linkList.push(listNode);            listNode=listNode.next;        }        //倒序连接        ListNode currentNode=linkList.pop();        head=currentNode;        int stackSize=linkList.size();        for(int i=0;i<stackSize;i++){            listNode=linkList.pop();            currentNode.next=listNode;            currentNode=listNode;            //尾结点的next置null            if(i==stackSize-1){                currentNode.next=null;            }        }        return head;     }}
原创粉丝点击