目录
前言:
生活加减法:知识要递增,烦恼要递减;友情要递增,怨恨要递减;善心要递增,灰心要递减;自信要递增,失信要递减;肚量要递增,妒量要递减。脚步要递增,烟酒要递减。
描述:
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为
1
->
1
->
2
,返回
1
->
2
.
给出的链表为
1
->
1
->
2
->
3
->
3
,返回
1
->
2
->
3
.
思路:
首先,链表为空直接返回
其次,如果当前结点值与下一结点的值相等
最后要注意一下else的位置,比如说结点1和2比较后相等把2消去,这个时候就不能把指针指向下一结点了,要继续比较1和3,所以消去结点和指向下一结点只能二选一
代码:
public ListNode deleteDuplicates (ListNode head) {
if(head==null)return head;
ListNode temp = head;
while(temp.next!=null){
if(temp.val==temp.next.val){
temp.next=temp.next.next;
}else{
temp=temp.next;
}
}
return head;
}
留一个重复元素,将重复元素全部删除
public static void main(String[] args){
remove();
}
public static void remove() {
int[] num = {1, 3, 3, 5, 6, 7, 9};
Node head = new Node(num[0]);
Node pre =head;
for (int i = 1;i< num.length;i++){
Node node = new Node(num[i]);
pre.next = node;
pre = node;
}
printLinkNode(head);
Node newHead = deleteDuNode(head);
printLinkNode(newHead);
}
/**
* 链表输出
* @param node
*/
public static void printLinkNode(Node node){
System.out.println(node.data);
if (node.next != null){
printLinkNode(node.next);
}
}
/**
* 链表去重
* @param head
* @return
*/
public static Node deleteDuNode(Node head) {
//首先判断链表是否为空
if (head == null) {
return head;
}
Node node0 = new Node(0);
node0.next = head;
Node pre = node0;
Node p = head;
while (p != null && p.next != null) {
if (p.data == p.next.data){
int val= p.data;
/*
//此while将重复元素全部删除
while (p!=null && p.data == val){
p= p.next;
}
*/
/*
//此while将重复元素删除并留下一个该元素
while (p.next!=null && p.next.data == val){
p.next = p.next.next;
}
*/
pre.next = p;
}else {
pre =p;
p = p.next;
}
}
return node0.next;
}
/**
* 定义链表结构
*/
static class Node {
public int data;
public Node next;
public Node(int data) {
this.data = data;
}
}
结尾:
宠爱的出发点是爱,落脚点却是恨;嫉妒的出发点是进,落脚点却是退;梦幻的出发点是绚(烂,落脚点却是空;贪婪的出发点是盈,落脚点却是亏。