1. 反转链表
public class ListReverse206 {
//定义一个单链表
public class ListNode {
int val; //当前节点值
ListNode next; //下一个节点值
//构造方法 初始化当前节点值
ListNode(int x) { val = x; }
}
/**反转链表 时间复杂度 O(n)
* 例:输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
* @param head 链表头节点
* @return 返回反转链表
*
* 设置三个节点pre(前节点)、cur(当前节点)、next(下一个节点)
* (1)每次查看cur节点是否为NULL,如果是,则结束循环,获得结果
* (2)如果cur节点不是为NULL,则先设置临时变量next为cur的下一个节点
* (3)让cur的下一个节点变成指向pre,而后pre移动cur,cur移动到next
* (4)重复(1)(2)(3)
*/
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next; //临时下一个节点
curr.next = prev; //当前节点指向前一个节点
prev = curr; //将prev移动到curr位置
curr = nextTemp; //将curr位置移动到临时下一个节点
}
return prev; //prev最后就是当前节点
}
}
2. 反转链表图解