题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 链接: 原题链接.
解题思路
一、三个节点倒
三个节点来回倒,手动模拟实现反转链表。 newHead:反转后链表的头节点 cur:当前链表的头节点 next:cur.next,改变cur.next指向后,还能通过next将cur更新为当前链表的头节点。
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null) return head;
ListNode newHead = null,cur = head,next = cur.next;
while(cur != null){
cur.next = newHead;
newHead = cur;
cur = next;
if(cur != null)
next = cur.next;
}
return newHead;
}
}
该方法可自行画图,便于理解。
二、递归方法
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode tail = head.next;
ListNode p = reverseList(head.next);
head.next = tail.next;
tail.next = head;
return p;
}
}
三、头插
分享翻到的一个比较简洁且好理解的方法:
class Solution {
public ListNode reverseList(ListNode head) {
ListNode ans = null;
for (ListNode x = head; x != null; x = x.next) {
ans = new ListNode(x.val,ans);
}
return ans;
}
}
|