题目:
在一个排序的链表中,如何删除重复的结点?
实现
public class Solution57 {
public static Node
deleteDuplicateNode(Node head){
if (head ==
null) {
return null;
}
Node root =
new Node();
root.next = head;
Node prev = root;
Node cur_node = head;
while (cur_node !=
null && cur_node.next !=
null) {
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 = cur_node.next;
}
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();
}
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);
}
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);
}
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);
}
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);
}
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);
}
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);
}
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);
}
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);
}
private static void test09() {
Node n1 =
new Node(
1);
System.
out.println(
"test9");
Node result = deleteDuplicateNode(n1);
printListNode(result);
}
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");
}
}