链表的反转
public ListNode reverseNode(ListNode head){
if (head == null){
return null;
}
ListNode pre = null;
ListNode p = head;
ListNode q = head.next;
while (q != null){
p.next = pre;
pre = p;
p = q;
q = q.next;
}
p.next = pre;
return p;
}
取中
public ListNode middleNode(ListNode head){
ListNode slow = head;
ListNode fast = head;
while (fast.next != null && fast.next.next != null){
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
两升序联表,合并后仍为升序(归并排序常用)
public ListNode merge(ListNode node1, ListNode node2) {
ListNode head = new ListNode(-1);
ListNode p = head;
while (node1 != null && node2 != null) {
if (node1.val < node2.val) {
p.next = node1;
node1 = node1.next;
}else {
p.next = node2;
node2 = node2.next;
}
p = p.next;
}
p.next = node1 == null ? node2 : node1;
return head.next;
}