剑指Offer-57
来源:互联网 发布:更改4g移动数据dns 编辑:程序博客网 时间:2024/05/18 15:27
题目:
在一个排序的链表中,如何删除重复的结点?
实现
public class Solution57 { public static Node deleteDuplicateNode(Node head){ if (head == null) { return null; }// // 只有一个结点// if (head.next == null) {// return head;// } // 临时的头结点 Node root = new Node(); root.next = head; // 记录前驱结点 Node prev = root; // 记录当前处理的结点 Node cur_node = head; while (cur_node != null && cur_node.next != null) { // 有重复结点,与node值相同的结点都要删除 if (cur_node.value == cur_node.next.value) { // 找到下一个不同值的节点,注意其有可能也是重复节点 while (cur_node.next != null && cur_node.next.value == cur_node.value) { cur_node = cur_node.next; } // 指向下一个节点,prev.next也可能是重复结点 // 所以prev不要移动到下一个结点 prev.next = cur_node.next; } // 相邻两个值不同,说明node不可删除,要保留 else { prev.next = cur_node; prev = prev.next; } cur_node = cur_node.next; } return root.next; } public static void main(String[] args) { test01(); test02(); test03(); test04(); test05(); test06(); test07(); test08(); test09(); test10(); } // 1->2->3->3->4->4->5 private static void test01() { Node n1 = new Node(1); Node n2 = new Node(2); Node n3 = new Node(3); Node n4 = new Node(3); Node n5 = new Node(4); Node n6 = new Node(4); Node n7 = new Node(5); n1.next = n2; n2.next = n3; n3.next = n4; n4.next = n5; n5.next = n6; n6.next = n7; System.out.println("test1"); Node result = deleteDuplicateNode(n1); printListNode(result); } // 1->2->3->4->5->6->7 private static void test02() { Node n1 = new Node(1); Node n2 = new Node(2); Node n3 = new Node(3); Node n4 = new Node(4); Node n5 = new Node(5); Node n6 = new Node(6); Node n7 = new Node(7); n1.next = n2; n2.next = n3; n3.next = n4; n4.next = n5; n5.next = n6; n6.next = n7; System.out.println("test2"); Node result = deleteDuplicateNode(n1); printListNode(result); } // 1->1->1->1->1->1->2 private static void test03() { Node n1 = new Node(1); Node n2 = new Node(1); Node n3 = new Node(1); Node n4 = new Node(1); Node n5 = new Node(1); Node n6 = new Node(1); Node n7 = new Node(2); n1.next = n2; n2.next = n3; n3.next = n4; n4.next = n5; n5.next = n6; n6.next = n7; System.out.println("test3"); Node result = deleteDuplicateNode(n1); printListNode(result); } // 1->1->1->1->1->1->1 private static void test04() { Node n1 = new Node(1); Node n2 = new Node(1); Node n3 = new Node(1); Node n4 = new Node(1); Node n5 = new Node(1); Node n6 = new Node(1); Node n7 = new Node(1); n1.next = n2; n2.next = n3; n3.next = n4; n4.next = n5; n5.next = n6; n6.next = n7; System.out.println("test4"); Node result = deleteDuplicateNode(n1); printListNode(result); } // 1->1->2->2->3->3->4->4 private static void test05() { Node n1 = new Node(1); Node n2 = new Node(1); Node n3 = new Node(2); Node n4 = new Node(2); Node n5 = new Node(3); Node n6 = new Node(3); Node n7 = new Node(4); Node n8 = new Node(4); n1.next = n2; n2.next = n3; n3.next = n4; n4.next = n5; n5.next = n6; n6.next = n7; n7.next = n8; System.out.println("test5"); Node result = deleteDuplicateNode(n1); printListNode(result); } // 1->1->2->3->3->4->5->5 private static void test06() { Node n1 = new Node(1); Node n2 = new Node(1); Node n3 = new Node(2); Node n4 = new Node(3); Node n5 = new Node(3); Node n6 = new Node(4); Node n7 = new Node(5); Node n8 = new Node(5); n1.next = n2; n2.next = n3; n3.next = n4; n4.next = n5; n5.next = n6; n6.next = n7; n7.next = n8; System.out.println("test6"); Node result = deleteDuplicateNode(n1); printListNode(result); } // 1->1->2->2->3->3->4->5->5 private static void test07() { Node n1 = new Node(1); Node n2 = new Node(1); Node n3 = new Node(2); Node n4 = new Node(2); Node n5 = new Node(3); Node n6 = new Node(3); Node n7 = new Node(4); Node n8 = new Node(5); Node n9 = new Node(5); n1.next = n2; n2.next = n3; n3.next = n4; n4.next = n5; n5.next = n6; n6.next = n7; n7.next = n8; n8.next = n9; System.out.println("test7"); Node result = deleteDuplicateNode(n1); printListNode(result); } // 1->2 private static void test08() { Node n1 = new Node(1); Node n2 = new Node(2); n1.next = n2; System.out.println("test8"); Node result = deleteDuplicateNode(n1); printListNode(result); } // 1 private static void test09() { Node n1 = new Node(1); System.out.println("test9"); Node result = deleteDuplicateNode(n1); printListNode(result); } // null private static void test10() { System.out.println("test10"); Node result = deleteDuplicateNode(null); printListNode(result); } public static void printListNode(Node head){ if(head==null){ System.out.print(" 链表为空"); } while (head!=null){ System.out.print(" "+head.value); head = head.next; } System.out.print("\n"); }}
阅读全文
1 0
- 剑指Offer-57
- 剑指OFFER
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 《剑指offer》
- 剑指Offer
- 剑指offer
- python中numpy.nonzero()用法
- MATLAB的二维画图(以plot为主)
- 排序算法(四)---- 堆排序
- C#返回Json格式数据
- Android小项目
- 剑指Offer-57
- node.js模块之exports
- groovy
- 技术文章 | seo外链优化需要规避的那些"坑"
- 实体处理模块IEntityModule
- startService和bindService
- 阿里云大数据利器之-RDS迁移到Maxcompute实现自动分区
- cookie
- HTML5屏幕适配标签设置