目录
一、题目
1、链接:力扣
2、题目:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
二、解题思路
链表翻转如上图 ,使用三个指针,一个fast指针、一个slow指针和一个current指针,具体步骤如下:
(1)fast指针,slow指针开始指向null,current指针指向head指针所指节点
(2)current指针指向不为空,开始遍历链表,fast指针指向current指针指向的下一个节点, current指针指向的节点的指针域指向slow指针所指位置
(3)slow指针指向current指针指向节点,current指针指向fast指针指向节点
(4)重复以上步骤(2)(3),改变1节点指针域指向位置
(5)重复步骤(2)(3),改变 3节点指针域指向
(6)重复步骤(2)(3),改变节点4的指针域指向
(7)current指针指向为空,返回slow指针
三、具体代码实现
public class lianbiao4 {
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
//链表反转
public ListNode reverseList(ListNode head) {
ListNode current=head;
ListNode slow=null;
ListNode fast=null;
while (current!=null){
fast=current.next;
current.next=slow;
slow=current;
current=fast;
}
return slow;
}
}