单向链表-链表反转

2020-05-25  本文已影响0人  今年花开正美

最近在并行复习数据结构与算法的知识,为了加强掌握,就把做题思路用画图的方式记录下来。今天是第一篇,常见的问题:链表反转,题目就不再阐述了。

实现思路

链表反转.png

大致说明:
1.为了简化对边界的判断,加入了哨兵节点,哨兵节点固定,随着节点不断移动,哨兵节点的next时刻指向最新的头节点。
2.实现的核心思路就是不断的移动初始头节点,将P节点的next节点设置为新的头节点,同时P节点的next节点指向原来的next的next节点。
3.每次循环都将P节点的后一个节点放到头部节点,最终当P节点的next为null时,链表就已经完全反转了。
4.最后,我们只要返回哨兵节点的next节点即可。

实现代码

public ListNode reverseList(ListNode head){
        if(null == head || null == head.next){
            return head;
        }

        ListNode P = head;
        //哨兵节点
        ListNode serHead = new ListNode(-1);
        serHead.next = head;

        while (P.next != null){
            ListNode temp = P.next;
            P.next = P.next.next;
            temp.next = serHead.next;
            serHead.next = temp;
        
        return serHead.next;
 }
上一篇下一篇

猜你喜欢

热点阅读