单向链表-链表反转
2020-05-25 本文已影响0人
今年花开正美
最近在并行复习数据结构与算法的知识,为了加强掌握,就把做题思路用画图的方式记录下来。今天是第一篇,常见的问题:链表反转,题目就不再阐述了。
实现思路

大致说明:
1.为了简化对边界的判断,加入了哨兵节点,哨兵节点固定,随着节点不断移动,哨兵节点的next时刻指向最新的头节点。
2.实现的核心思路就是不断的移动初始头节点,将P节点的next节点设置为新的头节点,同时P节点的next节点指向原来的next的next节点。
3.每次循环都将P节点的后一个节点放到头部节点,最终当P节点的next为null时,链表就已经完全反转了。
4.最后,我们只要返回哨兵节点的next节点即可。
实现代码
public ListNode reverseList(ListNode head){
if(null == head || null == head.next){
return head;
}
ListNode P = head;
//哨兵节点
ListNode serHead = new ListNode(-1);
serHead.next = head;
while (P.next != null){
ListNode temp = P.next;
P.next = P.next.next;
temp.next = serHead.next;
serHead.next = temp;
return serHead.next;
}