单向链表反转
static class Node {
Node next;
int val;
Node(int v){
this.val = v;
}
}
public static Node reverse(Node head) {
Node pre = null;
Node cur = head;
Node next = null;
while(cur != null) {
next= cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
双向链表反转
static class Node {
Node last;
Node next;
int val;
Node(int v){
val = v;
}
}
public static Node reverse(Node head){
Node pre = null;
Node cur = head;
Node next = null;
while(cur!=null){
next = cur.next;
cur.next = pre;
cur.last = next;
pre = cur;
cur = next;
}
return pre;
}
单向链表反转部分
public static Node reversePart(Node head,int from, int to) {
int len = 0;
Node p = head;
Node fPre = null,tPos = null;
while(p!=null){
len++;
fPre = len==from-1?p:fPre;
tPos = len==to+1?p:tPos;
p=p.next;
}
if(from<1||to>len) {
return head;
}
Node pre = tPos;
Node cur = fPre==null?head:fPre.next;
Node next = null;
while(cur!=tPos){
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
if(fPre!=null){
fPre.next = pre;
return head;
}else{
return pre;
}
}