- 题目:反转单链表
- 难度:Easy
- 思路:
- 定义三个指针,然后遍历链表,修改指针指向
- 因为对每个节点的操作都是相同的,因此可以用递归来实现反转
- 代码:
定义三个指针实现
public class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null){
return head;
}
//定义三个指针进行反转
ListNode pre = null;
ListNode curr = head;
ListNode next = curr.next;
while(next != null){
curr.next = pre;
pre = curr;
curr = next;
next = next.next;
}
curr.next = pre;
return curr;
}
}
递归实现
public class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode pre = null;
return recursion(pre, head);
}
public ListNode recursion(ListNode pre, ListNode curr){
if(curr == null){
return null;
}else if(curr.next == null){
curr.next = pre;
return curr;
}
ListNode next = curr.next;
curr.next = pre;
ListNode newNode = recursion(curr, next);
return newNode;
}
}