合并两个链表
ci博客链接:
合并两个链表
题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/submissions/
题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
题解
新建一个链表,在两个链表都不为空的情况下,比较两个链表中元素的值,取小的元素加入到新的链表中,最后判断两个链表那个链表不为空,链接到新链表中即可。
代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode newnode=new ListNode(0); ListNode p=newnode; while(l1!=null&&l2!=null){ if(l1.val<l2.val){ p.next=l1; p=p.next; l1=l1.next; } else{ p.next=l2; p=p.next; l2=l2.next; } } if(l1!=null){ p.next=l1; } if(l2!=null){ p.next=l2; } return newnode.next; } }
结果
翻转链表
题目链接:https://leetcode-cn.com/problems/reverse-linked-list/
题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
题解
翻转链表我一般都是使用头插法来做,头插法的思想是,新建一个链表,然后一个一个取老的链表中的元素,当取到一个元素时,先把元素的next指向新链表头部next的那个元素,然后再把新链表的头部的next指向新取的元素,这就是在一个链表额的头部插入一个元素,需要先连后断,所以要先把取到元素的next指向新链表头部的next,然后在用新链表的头部指向取到的元素。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode newnode=new ListNode(0);
ListNode p=head;
while(p!=null){
ListNode q=p;
p=p.next;
q.next=newnode.next;
newnode.next=q;
}
return newnode.next;
}
}
结果
出来混总是要还的