反转链表

public class 反转链表 {
    public static class ListNode{
        public int data;
        public ListNode next;
    }

    public static ListNode reverseList(ListNode pHead){
        ListNode pReversedHead = null; //反转过后的单链表存储头结点
        ListNode pNode = pHead; //定义pNode指向pHead;
        ListNode pPrev = null; //定义存储前一个结点
        while(pNode != null){
            ListNode pNext = pNode.next; //定义pNext指向pNode的下一个结点
            if(pNext==null){ //如果pNode的下一个结点为空,则pNode即为结果
                pReversedHead = pNode;
            }
            pNode.next = pPrev; //修改pNode的指针域指向pPrev
            pPrev = pNode; //将pNode结点复制给pPrev
            pNode = pNext; //将pNode的下一个结点复制给pNode
        }
        return pReversedHead;
    }

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode();
        ListNode listNode2 = new ListNode();
        ListNode listNode3 = new ListNode();
        listNode1.data = 1;
        listNode1.next = listNode2;
        listNode2.data = 2;
        listNode2.next = listNode3;
        listNode3.data = 3;
        listNode3.next = null;
        ListNode listNode = reverseList(listNode1);
        System.out.println(listNode.data);
        System.out.println(listNode.next.data);
        System.out.println(listNode.next.next.data);
    }
}
反转链表

  这个算法的最后一次循环,当时没咋搞懂,现在看,感觉差不多了

关于循环的最后一次:

 

 

这里可以看出走第一步过后,输出的next变为pNode所指

 

而这次走完最后一步过后,只有pNOde改变了,而输出没有变

 

我的理解是应为是引用类型,pNode赋值时是将地址赋值了,等于指针,里面的数据变了,结果也就变了,而最后一步,相当于用另一个 替换掉了原本的,相当于换了一个指针,而输出的指针没有变。所以输出的不会变为pNode的null如果有不对欢迎指出,主要是老师不搭理我!

 

posted @ 2022-05-22 21:44  七色angel  阅读(13)  评论(0编辑  收藏  举报