剑指offerNo15.反转链表(Java)

题目描述:

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

思路:用两个指针,其中一个指针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;
    }
}
发布了52 篇原创文章 · 获赞 11 · 访问量 3817

猜你喜欢

转载自blog.csdn.net/qq_40664693/article/details/104360497