【腾讯面试题】单链表反转

【腾讯面试题】单链表反转

  • 思路:
    1. 先定义一个节点 reverseHead= new Node();
    2. 从头到尾遍历原来的链表,没遍历一个节点,就取出,并放在新的链表reverseHead的最前端
    3. 原来的链表的head.next=reverseHead.next

  • 核心代码
/**
 * @ author Guo daXia
 * @ create 2022/11/14
 */
public class Reverse {
    /**
     * 实现单链表反转
     * @param head 传入一个头节点,进行反转
     */
    public static void reverseList(LinkedNode head){
        //先排除一些不可能
        if (head.next==null){
            return;
        }
        //定义一个辅助变量充当指针,遍历原来的链表
        LinkedNode c =head.next;
        LinkedNode next = null;
        LinkedNode reverseHead = new LinkedNode(0,"");

        //遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead的最前端,即头插法*****
        while (c!=null){
            next = c.next;//先暂时存当前节点的下一个节点,因为后面需要使用
            c.next=reverseHead.next;//当前节点c的下一个指向新1链表的下一个
            reverseHead.next=c;//将c连接到新的链表上
            c=next;//让c后移
        }
        head.next = reverseHead.next;//最后,将head.next指向reverseHead.next,共同指向同一片堆空间
    }
}
posted @ 2022-11-15 13:07  郭培鑫同学  阅读(20)  评论(0编辑  收藏  举报