LinkList 专题之三

Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        ListNode first=head;
        ListNode slow=head;
         ListNode pre=head;
        if(head==null||head.next==null||k==0){
            return head;
        }
        int count=1;
        while(pre.next!=null){
            pre=pre.next;
            count++;
        }

        if(k==count||k%count==0){ //注意k>list AND k为list的倍数
            return head;
        }
        k=k%count;
        for(int i=0;i<k;i++){
            first=first.next;
        }
        while(first!=null){
            slow=slow.next;
            first=first.next;
        }
        ListNode res=slow;
        while(slow.next!=null){
            slow=slow.next;
        }
        ListNode temp=head;
        while(temp!=res){
            slow.next=temp;
            temp=temp.next;
            slow=slow.next;
        }
        slow.next=null;
        return res;
    }
}

time O(n)

Remove Duplicates from Sorted List

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

分析:两个指针遍历pre和current,一前一后

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
         if(head==null||head.next==null){
            return head;
        }
       ListNode newhead=new ListNode(0);
       ListNode res=newhead;
       ListNode pre=head;
       ListNode current=head.next;
       while(current!=null){
           if(pre.val!=current.val){
               newhead.next=new ListNode(pre.val);
               pre=pre.next;
               current=current.next;
               newhead=newhead.next;
           }else{
               current=current.next;
               pre=pre.next;
           }
       }
          newhead.next=pre;
          return res.next;
    }
}

Remove Duplicates from Sorted List

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

分析:加一个可识别的flag去掉重复元素以及一个特例[1,1]or[2,2]....返回为null

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
       ListNode newhead=new ListNode(0);
       ListNode res=newhead;
       ListNode pre=head;
       ListNode current=head.next;
       if(pre.val==current.val&&current.next==null){
           return null;
       }
       boolean flag=true;
       while(current!=null){
           if(pre.val!=current.val&& flag==true){
               newhead.next=new ListNode(pre.val);
               pre=pre.next;
               current=current.next;
               newhead=newhead.next;
           }else if(pre.val!=current.val&& flag==false){
               current=current.next;
               pre=pre.next;
               flag=true;
           }else if(pre.val==current.val){
               current=current.next;
               pre=pre.next;
               flag=false;
           }
       }
       if(flag==true){
           newhead.next=pre;
       }
       return res.next;
    }
}
时间: 2024-10-05 23:58:24

LinkList 专题之三的相关文章

【开源夏令营优秀开题报告】专题之三-云与大数据合集

CSDN开源夏令活动已经正式进入第一实习阶段,我们遴选出部分优秀提案开题报告进行展示.本文是云计算与大数据类开题报告展示. 编者按:CSDN开源夏令活动,已经正式进入第一实习阶段,我们遴选出了部分提案的优秀开题报告进行展示.优秀开题报告作者将得到CSDN高校俱乐部发出的"2014开源夏令营荣誉证书"及纪念品一份. 提案1:数据可视化实践 提案简介:基于百度数据可视化组件(ECharts.ZRender)做数据可视化相关专题应用:内容主题不限,但建议贴近民生大众,如"环境&qu

leetcode LinkList专题

此次blog会将leetcode上的linklist专题内容放在这里,后续慢慢添加 一:leetcode 206 Reverse Linked List  二:leetcode 92 Reverse Linked List II 一:leetcode 206 Reverse Linked List 题目: Reverse a singly linked list. 代码: class Solution { public: ListNode* reverseList(ListNode* head)

【solr专题之三】Solr常见异常

1.RemoteSolrException: Expected mime type application/octet-stream but got text/html 现象: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.o

IdentityServer4专题之三:OAuth、SSO和OpenID

一.oauth 典型案例:如果一个用户R拥有两项服务:一项服务是图片在线存储服务A,另一个是图片在线打印服务B.由于服务A与服务B是由两家不同的服务提供商提供的,所以用户在这两家服务提供商的网站上各自注册了两个用户,假设这两个用户名各不相同,密码也各不相同.当用户要使用服务B打印存储在服务A上的图片时,用户该如何处理?法一:用户可能先将待打印的图片从服务A上下载下来并上传到服务B上打印,这种方式安全但处理比较繁琐,效率低下:法二:用户将在服务A上注册的用户名与密码提供给服务B,服务B使用用户的帐

【Java并发专题之三】Java线程同步

从JDK5引入CAS原子操作,但没有对synchronized关键字做优化,而是增加了J.U.C.concurrent,concurrent包有更好的性能:从JDK6对synchronized的实现机制进行了较大调整,包括使用JDK5引进的CAS自旋之外,还增加了自适应的CAS自旋.锁消除.锁粗化.偏向锁.轻量级锁这些优化策略. 优化后的锁有四种状态:无锁状态.偏向锁状态.轻量级锁状态.重量级锁状态,每种锁是只能升级,不能降级,即由偏向锁->轻量级锁->重量级锁,而这个过程就是开销逐渐加大的过

Git专题--系统的学习Git之三

本文为整理自:伯乐在线 1.Git详解之一:Git起步 2.Git详解之二:Git基础 3.Git详解之三:Git分支 4.Git详解之四:服务器上的Git 5.Git详解之五:分布式Git 6.Git详解之六:Git工具 7.Git详解之七:自定义Git 8.Git详解之八:Git与其他系统 9.Git详解之九:Git内部原理 Git详解之六:Git工具 Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务

吾爱专题脱壳练习----压缩壳练习之三

方法一: 载入OD,使用ESP定律: 下硬件访问断点之后,运行四次,跑飞,那么我们运行三次,到这里看到很多pop: retn返回后就到达OEP了: 方法二: 直接单步跟踪,跟踪到 F4跳过,继续跟踪: 遇到这个loopd,F4跳过. 继续单步跟踪,会在下面的这三个跳转指令间循环一阵子: 往上跳到这里: 往上跳到这里: 这里再往回跳. 但是第二个画了红框的跳转地址是会改变的,当你执行到一定次数的时候,第二个红框的跳转会让你跳转到这里:

中科燕园GIS外包案例之三-----海洋预报信息掌上发布系统

该系统采用B/S架构与M/S构架相结合,客户端包括web客户端和android移动客户端.数据由access和文本文件存储管理.web客户端借助ArcGIS API for JavaScript和开源的Dojo 1.8.0 在Visual studio 2010平台上开发,android客户端借助ArcGIS API for android,ArcGIS Runtime SDK for Android在Eclipse平台上开发.         [Web客户端] 1.常用地图操作:放大.缩小.平

Linux时间子系统专题汇总

DroidPhone关于Linux时间子系统专题: http://blog.csdn.net/DroidPhone/article/category/1263459 Linux时间子系统之一:clock source(时钟源) Linux时间子系统之二:表示时间的单位和结构 Linux时间子系统之三:时间的维护者:timekeeper Linux时间子系统之四:定时器的引擎:clock_event_device Linux时间子系统之五:低分辨率定时器的原理和实现 Linux时间子系统之六:高精