剑指offer面试题18:删除链表中重复的节点-java
2017-06-23 10:18
239 查看
题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:用递归删除,遇到相同的往后走,返回第一个不相同的节点
思路:用递归删除,遇到相同的往后走,返回第一个不相同的节点
public class DeleteDuplication { public ListNode deleteDuplication(ListNode head){ // 只有0个或1个结点,则返回 if (head ==null||head.next==null){ return head; } // 当前结点是重复结点 if (head.val == head.next.val){ ListNode pNode = head.next; while (pNode != null && pNode.val == head.val){ // 跳过值与当前结点相同的全部结点,找到第一个与当前结点不同的结点 pNode = pNode.next; } // 从第一个与当前结点不同的结点开始递归 return deleteDuplication(pNode); } else { // 当前结点不是重复结点,保留当前结点,从下一个结点开始递归 head.next = deleteDuplication(head.next); return head; } } public static void main(String[] args){ ListNode a = new ListNode(1); ListNode b = new ListNode(2); ListNode c = new ListNode(3); ListNode d = new ListNode(3); ListNode e = new ListNode(4); ListNode f = new ListNode(4); ListNode g = new ListNode(5); a.next=b; b.next=c; c.next=d; d.next=e; e.next=f; f.next=g; DeleteDuplication A = new DeleteDuplication(); ListNode head = A.deleteDuplication(a); System.out.print(head.val); } }
相关文章推荐
- 剑指Offer面试题18-2:删除链表重复的节点
- 剑指Offer 面试题18:删除链表节点 Java代码实现
- 剑指offer面试题18:删除链表的节点-java
- 剑指offer-----删除链表中重复的节点(java版)
- 《剑指Offer》面试题57:删除链表中重复的节点
- 剑指Offer面试题13(java版):在O(1)时间删除链表节点
- 剑指Offer(第二版)面试题18:删除链表的节点
- 剑指offer编程题Java实现——面试题13在O(1)时间内删除链表节点
- 【剑指offer】面试题18:删除链表中重复的节点
- 删除链表中重复的节点(Java实现)
- 剑指Offer面试题13(java版):在O(1)时间删除链表节点
- (剑指Offer)面试题57:删除链表中的重复结点
- 《剑指Offer》学习笔记--面试题57:删除链表中重复的结点
- 剑指offer-面试题57:删除链表中重复的结点
- 《剑指offer》删除链表中重复的节点
- 剑指offer-面试题57-删除链表中重复的结点
- 剑指offer 面试题13—在O(1)时间删除链表节点
- 剑指offer 面试题57 删除链表中重复的结点
- 删除链表重复节点-java
- 剑指offer系列之55:删除链表汇总重复的节点