• day10


    83. 删除排序链表中的重复元素

    简单

    1.1K

    相关企业

    给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 

    1. /**
    2. * Definition for singly-linked list.
    3. * public class ListNode {
    4. * int val;
    5. * ListNode next;
    6. * ListNode() {}
    7. * ListNode(int val) { this.val = val; }
    8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    9. * }
    10. */
    11. class Solution {
    12. public ListNode deleteDuplicates(ListNode head) {
    13. if(head == null || head.next == null)
    14. return head;
    15. ListNode p=head;
    16. ListNode q=p.next;
    17. while(q != null){
    18. if(p.val == q.val){
    19. p.next = q.next;
    20. q=q.next;
    21. }else{
    22. p=p.next;
    23. q=q.next;
    24. }
    25. }
    26. return head;
    27. }
    28. }

    82. 删除排序链表中的重复元素 II

    中等

    1.2K

    相关企业

    给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

    1. /**
    2. * Definition for singly-linked list.
    3. * public class ListNode {
    4. * int val;
    5. * ListNode next;
    6. * ListNode() {}
    7. * ListNode(int val) { this.val = val; }
    8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    9. * }
    10. */
    11. class Solution {
    12. public ListNode deleteDuplicates(ListNode head) {
    13. if(head == null || head.next == null)
    14. return head;
    15. ListNode pre_head = new ListNode();
    16. pre_head.next = head;
    17. ListNode pre = pre_head;
    18. ListNode cur = pre.next;
    19. while(cur != null && cur.next != null){
    20. if(cur.val == cur.next.val){
    21. while(cur != null && cur.next != null && cur.val == cur.next.val){
    22. cur=cur.next;
    23. }
    24. pre.next = cur.next;
    25. cur = pre.next;
    26. }else{
    27. pre = pre.next;
    28. cur = cur.next;
    29. }
    30. }
    31. return pre_head.next;
    32. }
    33. }

    234. 回文链表

    简单

    1.8K

    相关企业

    给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

    1. /**
    2. * Definition for singly-linked list.
    3. * public class ListNode {
    4. * int val;
    5. * ListNode next;
    6. * ListNode() {}
    7. * ListNode(int val) { this.val = val; }
    8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    9. * }
    10. // */
    11. // class Solution {
    12. // public boolean isPalindrome(ListNode head) {
    13. // // ArrayList a = new ArrayList();
    14. // // while(head != null){
    15. // // a.add(head.val);
    16. // // head=head.next;
    17. // // }
    18. // // int l=0;
    19. // // int r=a.size()-1;
    20. // // while(l<=r && a.get(l) == a.get(r)){
    21. // // l++;r--;
    22. // // }
    23. // // if(l<=r)
    24. // // return false;
    25. // // else
    26. // // return true;
    27. // }
    28. // }
    29. class Solution {
    30. public boolean isPalindrome(ListNode head) {
    31. if (head == null) {
    32. return true;
    33. }
    34. // 找到前半部分链表的尾节点并反转后半部分链表
    35. ListNode firstHalfEnd = endOfFirstHalf(head);
    36. ListNode secondHalfStart = reverseList(firstHalfEnd.next);
    37. // 判断是否回文
    38. ListNode p1 = head;
    39. ListNode p2 = secondHalfStart;
    40. boolean result = true;
    41. while (result && p2 != null) {
    42. if (p1.val != p2.val) {
    43. result = false;
    44. }
    45. p1 = p1.next;
    46. p2 = p2.next;
    47. }
    48. // 还原链表并返回结果
    49. firstHalfEnd.next = reverseList(secondHalfStart);
    50. return result;
    51. }
    52. private ListNode reverseList(ListNode head) {
    53. ListNode prev = null;
    54. ListNode curr = head;
    55. while (curr != null) {
    56. ListNode nextTemp = curr.next;
    57. curr.next = prev;
    58. prev = curr;
    59. curr = nextTemp;
    60. }
    61. return prev;
    62. }
    63. private ListNode endOfFirstHalf(ListNode head) {
    64. ListNode fast = head;
    65. ListNode slow = head;
    66. while (fast.next != null && fast.next.next != null) {
    67. fast = fast.next.next;
    68. slow = slow.next;
    69. }
    70. return slow;
    71. }
    72. }

    148. 排序链表

    中等

    2.1K

    相关企业

    给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

    1. /**
    2. * Definition for singly-linked list.
    3. * public class ListNode {
    4. * int val;
    5. * ListNode next;
    6. * ListNode() {}
    7. * ListNode(int val) { this.val = val; }
    8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    9. * }
    10. */
    11. class Solution {
    12. public ListNode sortList(ListNode head) {
    13. ArrayList<Integer> list = new ArrayList();
    14. ListNode p =head;
    15. while(head != null){
    16. list.add(head.val);
    17. head = head.next;
    18. p = null;
    19. p=head;
    20. }
    21. head = new ListNode();
    22. Collections.sort(list);
    23. p=head;
    24. int n = list.size();
    25. for(int i =0;i<n;i++){
    26. ListNode q = new ListNode(list.get(i));
    27. p.next = q;
    28. p=p.next;
    29. }
    30. return head.next;
    31. }
    32. }

  • 相关阅读:
    LeetCode-828. 统计子串中的唯一字符【哈希表,字符串,动态规划】
    我的编程之路
    Electron + vue搭建项目
    [CSS动效][按钮篇] 适用于 Material 的扁平化按钮
    Seata 1.5.2 源码学习
    基于工业5G网关的工业机器人监测控制方案
    Code Former安装及使用
    SpringBoot快速入门--高级版
    TouchGFX之自定义控件
    图05 --- 最短路径问题:算法与实现
  • 原文地址:https://blog.csdn.net/qq_62074445/article/details/133931590