/** 链表的节点 */ public class ListNode { public ListNode next; public Integer val; public ListNode() { } public ListNode(int val) { this.val = val; } @Override public String toString() { return val + ""; } }
反转代码需要先保存下一节点(nextNode),防止断链,whille循环当当前节点不为null,将当前节点(nowNode)的指针指向前一节点(preNode ),改变前一节点(preNode) 的值为当节点(nowNode),再改变当前节点(nowNode)为下一节点也就是最初保存的(nextNode)的值,
/** * 反转链表 * 输入一个链表,反转链表后,输出新链表的表头。 */ public class Solution { public ListNode ReverseList(ListNode head) { if (head == null) { return null; } ListNode nowNode = head; ListNode preNode = null;// 正向 while (nowNode != null) { ListNode nextNode = nowNode.next;//暂存 nowNode.next = preNode; //为下一次循环做准备 preNode = nowNode; nowNode = nextNode; } return preNode; } }