删除链表中重复的结点
来源:互联网 发布:足球黑色三分钟 知乎 编辑:程序博客网 时间:2024/05/16 18:50
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解法一:递归
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode deleteDuplication(ListNode pHead) {if(pHead == null || pHead.next == null) { return pHead; } if(pHead.next.val == pHead.val) { ListNode curNode = pHead.next.next; int val = pHead.val; while(curNode != null && curNode.val == val) { curNode = curNode.next; } return deleteDuplication(curNode); } else { pHead.next = deleteDuplication(pHead.next); return pHead; } }}
解法二:非递归
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode deleteDuplication(ListNode pHead) {if(pHead == null || pHead.next == null) { return pHead; } ListNode root = new ListNode(0); root.next = pHead;//头结点前驱结点 ListNode pre = root;//pre为移动当前节点的前驱节点 ListNode cur = pHead;//当前节点 while(cur != null && cur.next != null) { //当前节点与下一个节点值相等 if(cur.next.val == cur.val) { while(cur.next != null && cur.next.val == cur.val) { cur = cur.next; } //pre不需后移,因为node.next也可能是重复的 pre.next = cur.next; } //当前节点与下一节点 else { pre.next = cur; pre = pre.next; } cur = cur.next; } return root.next; }}
0 0
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 删除链表中重复的结点
- 正版ipa加载dylib且正常运行思路
- JS + CSS 图片切换效果
- android-多分辨率适配的思路
- python3.5入门1--运行报错:IndentationError: expected an indented block
- Ansoft HFSS____百度百科
- 删除链表中重复的结点
- 控制webview使用html5的video播放视频不全屏(inline)的方法
- Hibernate 缓存 之 Session 实现(一)
- 小萝莉五子棋(高能绕行)
- 社会变革、新医改与医疗信息化
- 人生虽然很艰难,但所有的付出都有回报
- Given a positive integer N, you should output the most right digit of N^N.
- cocos-js,内存管理1---引用计数方式
- ElasticSearch性能测试