0
点赞
收藏
分享

微信扫一扫

LeetCode上一些关于链表的热门算法操作


一、LC141 是否有环结构

public boolean hasCycle(ListNode head) {
Set<ListNode> set = new HashSet<>();
while (head != null) {
//如果重复出现说明有环
if (set.contains(head))
return true;
//否则就把当前节点加入到集合中
set.add(head);
head = head.next;
}
return false;
}

二、LC234 是否为回文链表

public boolean isPalindrome(ListNode head) {
ListNode node1 = head;
ListNode node2 = head;
Stack<Integer> stack = new Stack<>();

while(node1 != null) {
stack.push(node1.val);
node1 = node1.next;
}

while(node2 != null) {
if(node2.val == stack.peek()) {
stack.pop();
} else {
return false;
}
node2 = node2.next;
}
return true;
}

三、LC21 合并两个有序链表

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null){
return l2;
}else if(l2 == null){
return l1;
}else if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}

四、LC83 删除链表中的重复元素

public ListNode deleteDuplicates(ListNode head) {
if (head == null) return head;

while(head.next != null){
if (head.val == head.next.val){
head.next = head.next.next;
}else {
head = head.next;
}
}

return head;

}

五、LC203 移除链表元素

public ListNode removeElements2(ListNode head, int val) {
while (head != null && head.val == val) {
head = head.next;
}

ListNode prev = head;

if (prev != null)
{
while (prev.next != null)
{
if (prev.next.val == val)
prev.next = prev.next.next;
else
prev = prev.next;
}
}

return head;
}

六、LC206 反转链表

public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;

ListNode node = reverseList(head.next);
head.next.next = head;
head.next = null;
return node;
}

七、Offer22 返回链表倒数第K个元素

class Solution {
public int kthToLast(ListNode head, int k) {
List<Integer> list = new ArrayList<>();
while (head != null) {
list.add(head.val);
head = head.next;
}
return list.get(list.size() - k);
}
}

LeetCode上一些关于链表的热门算法操作_有序链表


举报

相关推荐

0 条评论