问题:
在一个有序的链表中,删除重复的节点
分析:
1.定义两个节点 p,q和一个前驱节点 pre
2.令p 指向head,q指向head.next ,pre作为p的前驱
3.当q 指向的不为空时
1)当p 所指向的值与q不相等时,pre 指向p,p指向q,q指向q.next
2)当p 所指向的值与q相等时, pre 和 p 不动,q 向后一直移动,直到p 所指向的值与q不相等时,继续执行1)操作。
4. 执行完3操作后,要将pre和p值向后移动,即p指向q所在位置,q继续向后移动
5.当q所指向的为空时,结束循环,删除有序链表中的重复节点完成。
具体代码如下:
public class LinkedList {
public static Node delete(Node head){
Node node = new Node();
Node pre = node;
node.next = head;
Node p = head;
Node q = head.next;
while( q != null){
if(p.val != q.val){
pre = p ;
p = q;
q = q.next;
}else{
while(q!=null&&q.val==p.val){
q = q.next;
}
node.next=q;
p = q;
if(q != null){
q = q.next;
}
}
}
return node.next;
}
}
class Node{
int val;
Node next;
}