链表例题1:删除链表中的重复结点
解题思路:
1.创建一个结点类
2.创建一个删除方法
3.使用快慢指针的思想(主要的部分)
代码如下:
1 public class RemoveRepeation { 2 3 public static void main(String[] args) { 4 int data[]= {1,1,1,1,1,2,2,2,2,2,3,3,3,4,4,5,5,5,6,6,5,5,1,1,3,2,5,3,10,10}; 5 Node head=new Node(null); //创建一个头结点哑元 6 //将元素通过链表串进来 7 Node p=head; 8 for(int i=0;i<data.length;i++) 9 { 10 p.next=new Node(data[i]); 11 p=p.next; 12 } 13 14 //删除方法的调用 15 remove(head); 16 17 //删除后的结果输出 18 Node p1=head.next; 19 while(p1!=null) 20 { 21 System.out.print(p1.value+" "); 22 p1=p1.next; 23 } 24 } 25 26 27 private static void remove(Node node) 28 { 29 Node p1=node.next; //当前要比较的结点 30 Node pre=node.next; //慢指针 31 Node p2=pre.next; //快指针 32 while(p2!=null) 33 { 34 Object temp=p1.value; //存储要比较值从前往后一步一步走 35 36 //把要比较的值与它后面的值一一比较 37 while(p2!=null) 38 { 39 if(temp==p2.value) 40 { 41 //慢指针不动,快指针移动 42 pre.next=p2.next; 43 p2=pre.next; 44 } 45 else 46 { 47 //快,慢指针都向前移动一下 48 pre=p2; 49 p2=p2.next; 50 } 51 } 52 53 //重新再定义快,慢指针 54 if(p1.next!=null) 55 { 56 p1=p1.next; 57 pre=p1; 58 p2=p1.next; 59 } 60 } 61 } 62 63 //结点类 64 private static class Node 65 { 66 Node next; 67 Object value; 68 69 public Node(Object value) 70 { 71 this.value=value; 72 } 73 } 74 75 76 }
结果: