单链表反转
1.单链表整体反转
算法代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
// 单链表整体递归反转
public ListNode reverse(ListNode head){
if(head.next == null) return head;
ListNode result = reverse(head.next);
head.next.next = head;
head.next = null;
return head;
}
2.单链表部分旋转(0,n)
算法代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
ListNode temp = null; // 用来存储后继节点
public ListNode reverseN(ListNode head, int n){
if(n==1){
temp = head.next;
return head;
}
ListNode test = reverseN(head.next, n-1);
head.next.next = head;
head.next = temp;
return test;
}
3.单链表部分旋转(m,n)
算法代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if(m == 1) return reverseN(head,n);
head.next = reverseBetween(head.next, m - 1, n - 1);
return head;
}
ListNode temp = null; // 用来存储后继节点
public ListNode reverseN(ListNode head, int n){
if(n==1){
temp = head.next;
return head;
}
ListNode test = reverseN(head.next, n-1);
head.next.next = head;
head.next = temp;
return test;
}
}