链表反转
实现效果
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
实现代码
public LinkNode reverseList(LinkNode head) {
LinkNode prev = null; //翻转后新的链表
LinkNode curr = head; //当前链表
while (curr != null){
LinkNode tem = curr.next; //将链表除头结点之外的其他结点赋值给tem指针
curr.next = prev; //将当前链表的头结点和prev链表结合(翻转后的链表)
prev = curr; //然后将结合后的新链表赋值给prev链表(翻转后的链表)
curr = tem; //将tem指针赋值给当前链表进行下一轮翻转(tem指针链表到这已经少了第一个结点)
}
return prev;
}
思路:
用三个指针来操作
- 一个指针指向原链表
- 一个指针指向反转后的新链表
- 一个指针当做中间链表(临时结点)
步骤(结合上面的代码)
- 初始状态下三个指针的数据指向如下图
- curr指针指向原链表
- prev指针指向反转后的新链表
- tem指向中间链表(临时结点)
1 第一次循环后的指针状态
2. 第二次循环后的指针状态
3. 第三次循环后的指针状态
4. 第四次循环后的指针状态
5. 第五次循环后的指针状态
结果
通过好几次循环迭代之后,得到的反转后的链表
图画的粗糙,大家酬和着看吧