题目描述
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.
题目不难,链表操作。
定义一个初始结点指向头结点,然后定义一个cur结点,用于循环往下走的,并把头结点赋值给cur,定义一个pre结点用于记住停留的位置,while循环内,如果cur结点和cur下一个结点值不相等,则pre=cur,否则循环找到不相等的位置,然后pre.next = cur.next;最后cur = cur.next去判断下一个结点。
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode newnode = new ListNode(head.val-1);
newnode.next = head;
ListNode cur = head;
ListNode pre = newnode;
while(cur != null && cur.next != null) {
if(cur.val != cur.next.val) {
pre = cur;
}else{
while(cur.next != null && cur.val == cur.next.val) {
cur = cur.next;
}
pre.next = cur.next;
}
cur = cur.next;
}
return newnode.next;
}
}