[力]の要素IIの繰り返しのリストをソートする82 Deleteボタン

まず、対象の説明:

ソートされたリストを考えると、すべてのノードが唯一のデジタル元のリストが繰り返しされていないままに、繰り返しの数字が含まれて削除します。

例1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5

例2:

输入: 1->1->1->2->3
输出: 2->3

出典:滞在ボタン(LeetCode)
//leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii:リンク:httpsの
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。

第二に、問題解決のアイデア:

1、及び要素が繰り返されているかどうかを見つけるために、リストをトラバース。
繰り返していない場合は2、現在のリストに新しい要素を追加し、新しいリストを作成します。
3、重複した場合は、重複ノードを削除します。
ソートされたリストを考える:その現在のリストと秩序、隣接する特定の要素を繰り返します。

第三に、コード説明:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
    //创建一个新链表
     ListNode newHead=new ListNode(-1);
     ListNode newTail=newHead;
     ListNode cur=head;
     while(cur!=null){
     //针对某个引用进行 . 操作的时候, 必须保证该引用不能是 null
         if(cur.next!=null&&cur.val==cur.next.val){
         //当前元素是重复元素,查找重复元素区间。
             while(cur.next!=null&&cur.val==cur.next.val){
                 cur=cur.next;
             }
             //while循环结束后,cur指向重复元素中的最后一个位置。
             //cur向前再走一步,跳过了整个相同元素的区间。
             cur=cur.next;
         }
         else{
         //当前元素不是重复元素,插入到新链表中
             newTail.next=new ListNode(cur.val);
             newTail=newTail.next;
             cur=cur.next;
         }
     }
     return newHead.next;
    }
}
公開された75元の記事 ウォン称賛14 ビュー1901

おすすめ

転載: blog.csdn.net/qq_45328505/article/details/104581111