博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer-删除链表中重复的结点
阅读量:4925 次
发布时间:2019-06-11

本文共 2270 字,大约阅读时间需要 7 分钟。

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
链接:https://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef来源:牛客网if (pHead==null || pHead.next==null){
return pHead;}ListNode Head = new ListNode(0);Head.next = pHead;ListNode pre = Head;ListNode last = Head.next;while (last!=null){ if(last.next!=null && last.val == last.next.val){ // 找到最后的一个相同节点 while (last.next!=null && last.val == last.next.val){ last = last.next; } pre.next = last.next; last = last.next; }else{ pre = pre.next; last = last.next; }}return Head.next;

 

链接:https://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef来源:牛客网public static ListNode deleteDuplication(ListNode pHead) {                 ListNode first = new ListNode(-1);//设置一个trick         first.next = pHead;         ListNode p = pHead;        ListNode last = first;        while (p != null && p.next != null) {            if (p.val == p.next.val) {                int val = p.val;                while (p!= null&&p.val == val)                    p = p.next;                last.next = p;            } else {                last = p;                p = p.next;            }        }        return first.next;    }

 

链接:https://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef来源:牛客网public class Solution {    public ListNode deleteDuplication(ListNode pHead) {        if (pHead == null || pHead.next == null) { // 只有0个或1个结点,则返回            return pHead;        }        if (pHead.val == pHead.next.val) { // 当前结点是重复结点            ListNode pNode = pHead.next;            while (pNode != null && pNode.val == pHead.val) {                // 跳过值与当前结点相同的全部结点,找到第一个与当前结点不同的结点                pNode = pNode.next;            }            return deleteDuplication(pNode); // 从第一个与当前结点不同的结点开始递归        } else { // 当前结点不是重复结点            pHead.next = deleteDuplication(pHead.next); // 保留当前结点,从下一个结点开始递归            return pHead;        }    }} /* 作者:牛客396545268号 链接: 来源:牛客网 pHead.next = deleteDuplication(pHead.next); 实参pHead.next表示将当前节点与下一节点不同, 所以要将下一节点放入递归程序去参加下一轮的比较,这样就将pHead保留了下来。 返回值给pHead.next表示deleteDuplication返回了一个无重复的节点,所以要让当前节点指向它。 */

 

转载于:https://www.cnblogs.com/Roni-i/p/10370366.html

你可能感兴趣的文章
Golang理解-集合
查看>>
element中使用表单验证rules 需要注意
查看>>
AnyChatSDK 实现视频通话
查看>>
Gerrit error when Change-Id in commit messages are missing
查看>>
【面试题】实现一个队列数据结构,并使用这个队列实现一个生产者消费者模式...
查看>>
第二阶段团队冲刺第二天站立会议
查看>>
隐式激活Activity
查看>>
DAG
查看>>
使用MVVM框架时,如何处理在页面动态渲染完之后需要发生的事件呢?
查看>>
StringBuilder与StringBuffer的区别
查看>>
String、StringBuffer、StringBuilder
查看>>
(转)导出EXCEL时科学计数法问题
查看>>
SVN客户端与服务器端搭建
查看>>
知识点整理一
查看>>
判断浏览器
查看>>
追加window.onload事件
查看>>
python并发编程之进程池,线程池concurrent.futures
查看>>
rdd的元素打印
查看>>
hdu4812 点分治水题
查看>>
最长回文子串(Manacher算法)
查看>>