剑指offer第2版24题:反转链表

小渣渣的算法学习笔记:2018秋招备战


数据结构类算法总结:链表


1.题目描述:

输入一个链表,反转链表后,输出新链表的表头。
定义3个指针分别指向当前结点,它的上一个结点,下一个结点

2.代码实现:

public class Solution24 {
    private static class ListNode {
        int val;
        ListNode next = null;
        ListNode(int val) {
            this.val = val;
        }
    }

    public static void main(String[] args) {
        ListNode l1 = new ListNode(5);
        ListNode l2 = new ListNode(3);
        ListNode l3 = new ListNode(2);
        ListNode l4 = new ListNode(6);
        ListNode l5 = new ListNode(8);
        ListNode l6 = new ListNode(9);
        l1.next = l2;
        l2.next = l3;
        l3.next = l4;
        l4.next = l5;
        l5.next = l6;
        Solution24 s = new Solution24();
        ListNode n = s.ReverseList(l1);
        while(n!=null){
            System.out.print(n.val+" ");
            n=n.next;
        }
    }

    public ListNode ReverseList(ListNode head){
        ListNode reverseHead = null;
        ListNode pnode = head;
        ListNode prev = null;
        while(pnode != null){
            ListNode pNext = pnode.next;//保存原始链表中当前结点的下一个结点,防止链表断开
            if(pNext == null){
                reverseHead = pnode;//反转后头结点是原始链表next为空的尾结点
            }
            pnode.next = prev;
            prev = pnode;
            pnode = pNext;
        }
        return reverseHead;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_42561115/article/details/80945498