反转链表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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如果有不对欢迎指出,主要是老师不搭理我!