有关反转链表模板
反转整个链表(迭代与递归实现)
ListNode reverse(ListNode head) {
ListNode pre = null, cur = head, next;
while (cur != null) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
public ListNode reverseList(ListNode head, int n) {
if (n == 1) {
lastNode = head.next;
return head;
}
ListNode last = reverseList(head.next, n - 1);
head.next.next = head;
head.next = lastNode;
return last;
}
```
## 反转链表(head开头)第1到n个节点范围的链表反转
```java
ListNode lastNode = null;
public ListNode reverse(ListNode head, int n) {
if(n == 1) {
lastNode = head.next;
return head;
}
ListNode last = reverse(head.next, n - 1);
head.next.next = head;
head.next = lastNode;
return last;
}
```
## 反转head第m个位置开始的节点起数第n-m个节点内范围的链表
```java
public ListNode reverse(ListNode head, int m, int n) {
if(m == 1) {
return reverse(head, n);
}
head.next = reverse(head.next, m - 1, n - 1);
return head;
}
```
## 从前往后反转, 反转以a开始并以b结尾的链表(反转时不包括节点b)
```java
public ListNode reverseList(ListNode a, ListNode b) {
ListNode pre = null, cur = a, next;
while (cur != b) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
```