反转链表LeetCode206
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题方法分为递归法和迭代法。
其中递归法比较容易理解;
用ListNode设出来的的是节点
思路:借助三个节点,分别是空指针(作用就是作为一个中间值,没有其他意义),另外两个就是连着的指针,从头开始走。
注意:他们三个位置是连着的
假设三个节点分别为:0,1, 2, 3
文字描述:
先做排除空值的情况,0是空值,1,2,3都是有值的。将1指向0,然后将1的值赋给0,这时候1指向0,断开之前的1指向2,原来的一条链现在形成两个单独的链,然后使这三个节点整体向后移动一个单位
继续刚才的操作,最后全部都会反转过来,不满足循环条件自己停止,这时候0这个空节点在最前面,打印输出即可
代码实现:
class Solution { public ListNode reverseList(ListNode head) { ListNode dummy = new ListNode(); ListNode prev = null; while( head != null){ ListNode next = head.next; head.next = prev; prev = head; head= next; } return prev; } }