• 移除链表中重复的元素


    先上题目 

    给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。 
    尝试这做了一些,下面上代码
      public static ListNode Remove(ListNode head, int val)
            {
                ListNode A = head;
                ListNode b = null;
                //排除表头值相等
    
             
                //先不去管当前的表头的 val是否相等;
                while (A.next != null)
                {
                 
                    if (A.next.val == val)
                    {  //b就是相等的结点
                        b = A.next;
                        //判断b的next是否为空
                       if (b.next == null)
                        {   //这里为什么不写b.next=Null;
                            //进行到这里就要跳出循环了
                            // 现在我们的b没有进行任何赋值操。
                            //b再这里不属于链表的
                            //A.属于链表
                            A.next = null;
                                break;
                        }
                        //把b的下一个结点给a的下一个结点。
                        //A.next 结点存储的当前val相等的结点的位置
                        // A.next = b.next; 就是把当前 b.next的地址给A.next,
                        //原本存在A.next里面的结点,指向的位置发生了改变,到了b.next的位置
                        A.next = b.next;
                       
                    }
                    else
                    {    //就是循环链表
                        A = A.next;
                    }
                  
                }
                //最后再考虑当前的表头的val是否相等
                //如果相当,就把表头的next结点的地址给head,
                if (head.val == val)
                {
                    head = head.next;
                }
                return head;
            }
      ListNode a = new ListNode(3);
               
                ListNode b = new ListNode(2);
                ListNode c = new ListNode(3);
                ListNode d = new ListNode(3);
                ListNode e = new ListNode(3);
                ListNode f = new ListNode(5);
                ListNode g = new ListNode(3);
                a.next = b;
                b.next = c;
                c.next = d;
                d.next = e;
                e.next = f;
                f.next = g;
               ListNode head=  Remove(a, 3);
                ListNode s = head;
                //Console.WriteLine(s.next.val);
               ListNode B = new ListNode(0);
                B = head;
                while (B != null)
                {
                    Console.WriteLine(B.val);
                    B = B.next; ;
                }
                //Console.WriteLine(s.val);
                Console.ReadKey();

  • 相关阅读:
    从docker容器拷贝文件出来
    R csv数据集资源下载
    使用docker镜像搭建Python3 jupyter notebook环境
    用Python合并多个Excel文件
    vscode保存文件时自动删除行尾空格
    js判断数组是否包含某元素
    数据库锁问题
    协程
    进程间的八种通信方式
    进程与线程的区别
  • 原文地址:https://www.cnblogs.com/wscar/p/6486439.html
Copyright © 2020-2023  润新知