题目:
提供单向链表的头节点head,请反转链表,并返回反转后的链表。分析
- 同速指针:链表上两个指针,一个先出发,另一个后出发并以相同的速度跟随
- 通过临时指针让双指针同步前行
思路
源码
package org.example.pointer;
/**
* 反转链表
* @author Abner G
* @date 2022/5/12 22:55
*/
public class practicePointer02 {
/**
* 题目
* 提供单向链表的头节点head,请反转链表,并返回反转后的链表。
* 输入:head = [1,2,3,4,5]
* 输出:[5,4,3,2,1]
*
* 思路:
* 同速指针:链表上两个指针,一个先出发,另一个后出发并以相同的速度跟随
* 通过临时指针让双指针同步前行
*
* 1->2->3->4->5->null
*
* 5->4->3->2->1->null
*
*/
public ListNode reverseList(ListNode head) {
//空链表或者只有一个元素的链表,不需要反转
if (head==null||head.next==null){
return head;
}
ListNode p1=head;
ListNode p2=null;
while (p1!=null){
//temp=3->4->5->null
ListNode temp=p1.next;
//反转 1->null
p1.next=p2;
//双指针同步往前
p2=p1;
p1=temp;
}
return p2;
}
}
class ListNode{
String value;
ListNode next;
public ListNode(String value) {
this.value = value;
}
public ListNode(String value, ListNode next) {
this.value = value;
this.next = next;
}
}