zoukankan      html  css  js  c++  java
  • linkedlist 常见api: 取中点, 翻转, 合并,插入

    取中点:

    1   ListNode fast = head , slow = head ;
    2         ListNode mid = null ;
    3         //step 1: find the middle node: when fast reaches the end, slow reaches the mid
    4         //note: middle node has to be fast.next != null && fast.next.next != null
    5         while (fast != null && fast.next != null && fast.next.next != null){
    6             fast = fast.next.next ;
    7             slow = slow.next ;
    8         }
    9         mid = slow ;

     

    翻转:

     1 /*1->2->3->4   to 1<-2<-3<-4
     2     *                          p c
     3     * */
     4     private ListNode reverse(ListNode head){
     5         ListNode pre = null ;
     6         ListNode curr = head ;
     7         while (curr!= null){
     8             ListNode temp = curr.next ;
     9             curr.next = pre ;
    10             pre = curr ;
    11             curr = temp;
    12         }
    13         return pre ;
    14     }

     

    合并:

     1 private ListNode merge(ListNode head1, ListNode head2) {
     2     ListNode curr1 = head1, curr2 = head2, temp1 = null, temp2 = null;
     3    while (curr1.next != null && curr2 != null) {
     4    temp1 = curr1.next;
     5       temp2 = curr2.next;
     6       curr1.next = curr2;
     7       curr2.next = temp1;
     8       curr1 = temp1;
     9       curr2 = temp2;
    10     }
    11     if (curr2 != null) {
    12      curr1.next = curr2;
    13       curr2.next = null;
    14     }
    15     else {
    16      curr1.next = null;
    17     }
    18     return head1;
    19   }

     

    插入:使用DUMMY head 避免了头部不确定, 头部为空等各种情况

     1 public ListNode insert(ListNode head, int value) {
     2         // Write your solution here
     3         ListNode dummy = new ListNode(0);
     4         dummy.next = head ;
     5         ListNode pre = dummy ;
     6         ListNode curr = head ;
     7         while (curr != null && curr.val<=value){
     8             pre = curr ;
     9             curr = curr.next ;
    10         }
    11         ListNode target = new ListNode(value) ;
    12         pre.next = target ;
    13         target.next = curr ;
    14         //work for both cases: before head or in the middle
    15         return dummy.next ;
    16     }
  • 相关阅读:
    Docker-compose部署Elasticsearch+Kibana+Filebeat+APM(7.13.2)
    容器和镜像转化、迁移方式
    Docker部署redis主从+读写分离+哨兵
    简单的Redis及哨兵监控报警
    Prometheus监控docker容器
    Jenkins---多选参数构建
    Nginx——基于站点目录和文件的URL访问控制、禁止IP/非法域名访问
    Docker-compose构建jenkins环境
    Docker部署kafka集群
    Goreplay-使用真实流量测试
  • 原文地址:https://www.cnblogs.com/davidnyc/p/8469073.html
Copyright © 2011-2022 走看看