力扣206.反转链表
题目链接:206. 反转链表 - 力扣(LeetCode)
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
-
链表中节点的数目范围是
[0, 5000]
-
-5000 <= Node.val <= 5000
双指针:
/*** Definition for singly-linked list.* 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; }* }*/
class Solution {public ListNode reverseList(ListNode head) {ListNode pre=null;ListNode curr=head;ListNode tmp=null;while(curr!=null){tmp=curr.next;//临时指针,趁curr和下一个结点还连着的时候保存curr.nextcurr.next=pre;pre=curr;curr=tmp;}return pre;}
}
递归:
/*** Definition for singly-linked list.* 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; }* }*/
class Solution {public ListNode reverseList(ListNode head) {//递归return reverse(head,null);}public ListNode reverse(ListNode curr,ListNode pre){if(curr==null){return pre;}else{ListNode tmp=null;tmp=curr.next; //保存下一个结点curr.next=pre; //反转return reverse(tmp,curr);}}
}