反转链表
链表的数据结构如下:
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
实现链表的反转可以借助三个指针pre、cur、temp
public ListNode ReverseList(ListNode head) {
ListNode cur = head;
ListNode pre = null;
while(cur != null) {
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
而局部反转可以
public ListNode reverseBetween (ListNode head, int m, int n) {
//当m为1时,如果不设置res而是使用pre=null,会使temp.next=pre.next没有指向
ListNode res = new ListNode(-1);
res.next = head;
ListNode cur = head;
ListNode pre = res;
for (int i = 1; i < m; i++) {
pre = cur;
cur = cur.next;
}
for (int i = m; i < n; i++) {
ListNode temp = cur.next;
//保存cur.next指针指向的位置
cur.next = temp.next;
temp.next = pre.next;
pre.next = temp;
}
return res.next;
}