LaLaland(Zip two Lists)链表

Zip two Lists

将两个链表链接到一起,考验我们对引入类型的属性程度
不能使用List,而是自己定义类来存储数据

点击查看代码
    class Test
    {
    static void Main(string[] arg)
    {
        var list1=MakeList(1,3,5,7,8);
        var list2=MakeList(2,4,6,9,11,12,13,14);
        var link=MakeLink(list1,list2);
        PrintList(link);
    }

        static Nope MakeLink(Nope a,Nope b)
        {
            //此时zipper与head指向同块内存地址
            Nope head=new Nope(),zipper=head;  //单向链表dummy head
            while(true)
            {
                if(a==null)
                {
                    zipper.next=b;
                    break;
                }

                if(b==null)
                {
                    zipper.next=a;
                    break;
                }

                if(a.val<=b.val)
                {
                    zipper.next=a;
                    a=a.next;
                }else
                {
                    zipper.next=b;
                    b=b.next;
                }

                zipper=zipper.next; //此时zipper所指向的就是head中next所在的类的内存空间地址
            }

            return head.next;
        }


        static Nope MakeList(params int[]a)
        {
            Nope head=null;
            for(int i=a.Length-1;i>=0;i--)
            {
                head=new Nope(){val=a[i],next=head};
            }
            return head;
        }

        static void PrintList(Nope a)
        {
            while(a!=null)
            {
                System.Console.WriteLine(a.val);
                a=a.next;
            }
        }
    }
    class Nope
    {
        public int val;
        public Nope next;
    }

}

可以简化为

点击查看代码
    class Test
    {
    static void Main(string[] arg)
    {
        var list1=MakeList(1,3,5,7,8);
        var list2=MakeList(2,4,6,9,11,12,13,14);
        var link=MakeLink(list1,list2);
        PrintList(link);
       
    }

        static Nope MakeLink(Nope a,Nope b)
        {
            //此时zipper与head指向同块内存地址
            Nope head=new Nope(),zipper=head;  //单向链表dummy head
            while(a!=null&&b!=null)
            {
                if(a.val<=b.val)
                {
                    zipper.next=a;
                    a=a.next;
                }else
                {
                    zipper.next=b;
                    b=b.next;
                }

                zipper=zipper.next; //此时zipper所指向的就是head中next所在的类的内存空间地址
            }

            // zipper.next=a==null?b:a; //方法一
            zipper.next=a??b;//方法二
            return head.next;
        }


        static Nope MakeList(params int[]a)
        {
            Nope head=null;
            for(int i=a.Length-1;i>=0;i--)
            {
                head=new Nope(){val=a[i],next=head};
            }
            return head;
        }

        static void PrintList(Nope a)
        {
            while(a!=null)
            {
                System.Console.WriteLine(a.val);
                a=a.next;
            }
        }
    }
    class Nope
    {
        public int val;
        public Nope next;
    }

}

逆序相加

image

点击查看代码
public class Solution {
    public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head=new ListNode(0),Zipper=head;
        int sum=0; //对位相加的值
        int nAdd=0; //十进制进位
        while(l1!=null||l2!=null||nAdd!=0)
        {
            int n1=l1==null?0:l1.val;
            int n2=l2==null?0:l2.val;
            sum=n1+n2+nAdd;
            nAdd=sum/10;
            Zipper.next=new ListNode(sum%10);
            Zipper=Zipper.next;
            l1 = l1?.next;
            l2 = l2?.next;
        }
        return head.next;
    }
}
posted @ 2022-02-09 21:10  Ariaaaaa  阅读(5)  评论(0)    收藏  举报