剑指offerNo15.反转链表(Java)

断了今生、忘了曾经 提交于 2020-02-18 04:24:47

题目描述:

输入一个链表,反转链表后,输出新链表的表头。

思路:用两个指针,其中一个指针next用来保存head.next之后的节点,

然后用prev指针指向当前节点的前一个节点,将当前节点的next指向前一个节点。

最后将当前节点和当前节点的前一个节点进行后移

代码:

package offer;

public class TestNo15 {
    static class ListNode{
        int val;
        ListNode next;
        ListNode(int x){
            val = x;
        }
        public String toString(){
            if(this.next==null){
                return String.valueOf(this.val);
            }else{
                return this.val +"->" + this.next.toString();
            }
        }
    }
    public static void main(String[] args) {
        ListNode head = new ListNode(0);
        ListNode newHead = head;
        for(int i= 1;i<5;i++){
            newHead.next = new ListNode(i);
            newHead = newHead.next;
        }
        System.out.println(new TestNo15().ReverseList(head));
    }
    //非递归反转链表
    public ListNode ReverseList(ListNode head) {
        ListNode prev = null;
        ListNode next = null;
        while (head != null) {
            next = head.next; // next保存head的下一个节点
            head.next = prev; // 将当前节点的next断开,指向前一个节点,实现反转
            prev = head;//将当前节点的前节点进行后移
            head = next;//将当前节点进行后移
        }
        return prev;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!