leetcode练习
206.反转列表
这道题其实没什么难度,思路对了很快就可以做出来,注意递归的思路。
//迭代法
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while(cur!=null) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
//递归法
public ListNode reverseList(ListNode head) {
return reverse(null,head);
}
private static ListNode reverse(ListNode pre,ListNode cur){
if(cur==null) return pre;
ListNode next = cur.next;
cur.next = pre;
return reverse(cur,next);
}
21.合并两个有序链表
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode re = new ListNode();
ListNode cur = re;
while (l1 != null && l2 != null) {
if (l1.val >= l2.val) {
cur.next = l2;
cur = cur.next;
l2 = l2.next;
} else {
cur.next = l1;
cur = cur.next;
l1 = l1.next;
}
}
if (l1 != null) {
cur.next = l1;
}
if (l2 != null) {
cur.next = l2;
}
return re.next;
}