精华内容
下载资源
问答
  • 9.4.3 引用一个按别名返回的堆中对象 140 9.4.4 在哪里创建,就在哪里释放 141 9.5 总结 142 第10章 深入函数 144 10.1 函数重载 144 10.1.1 普通函数的重载 144 10.1.2 成员函数的重载 145 10.2 函数的默认...
  • 2.Add Two Number

    2017-11-30 18:49:24
    2.如何创建一个新链表来依次保存值 创建一个首节点,保存该首节点。 创建下一个节点,将值保存在下一个节点中,将当前节点指向下一个节点,最后返回首节点的下一节点链表就是我们所需要的链表。 ListNode p=...

    1.设置标志位

    2.如何创建一个新链表来依次保存值

    创建一个首节点,并保存该首节点。

    创建下一个节点,将值保存在下一个节点中,并将当前节点指向下一个节点,最后返回首节点的下一节点链表就是我们所需要的链表。

    ListNode p=new ListNode(0);

    ListNode dummy=p;

    p.next=New ListNode(val)//val为计算后我们需要保存的值

    p=p.next;

    return dummy.next;


    这样做有两个好处,不改变原有链表,不在原有链表上修改,最后一个节点不会有多余值。


    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            if(l1==null||l2==null){
                return null;
            }
            ListNode p=new ListNode(0);
            ListNode p1=l1;
            ListNode p2=l2;
            int carry=0;//设置标志位来代表进位的数字
            //p.next=p1;
            ListNode dummy=p;
            while(p1!=null||p2!=null){
                int d1=(p1==null)?0:p1.val;//这样写是因为两个链表可能长度不一样
                int d2=(p2==null)?0:p2.val;
                int sum=d1+d2+carry;
                carry=sum>9?1:0;
                p.next=new ListNode(sum%10);//直接创建新节点,并让p指向下一个节点,最后只要返回第一个节点的下一个节点即可
                                            //提供了一中创建新链表的方法
                p=p.next;
                if(p1!=null){
                    p1=p1.next;
                }
                if(p2!=null){
                    p2=p2.next;
                }
            }
            if(carry==1) p.next=new ListNode(1);
            return dummy.next;
            
                //p.val=sum%10;
                //p.next=new ListNode(-1);//这样做会导致最后会多有一个节点。
    //             int va=p1.val+p2.val;
    //             if(va>9){
    //                 p.val=va-10;
    //                 if(p.next!=null){
    //                     p.next.val=p.next.val+1;
    //                 }else{
    //                     ListNode q=new ListNode(1);
    //                     p.next=q;
    //                 }
                    
    //             }else{
    //                 p.val=va;
    //             }
    //             ListNode w=new ListNode(0)
    //             p.next=w;
    //             p1=p1.next;
    //             p2=p2.next;
            // }
            // //p=(p1==null)?p2:p1;
            // return dummy;
        }
    }




    展开全文
  • 而名字我们发现搜索到的名字的指针没有在我们的背包结构内存中,我们继续通过名字来查找,发现他是来自另外一个结构,那么的问题出现了这个物品结构是如何匹配物品名字的呢?通过分析我们发现原来那个ID值就是这个...
  • 你必须知道的495C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此...
  • 我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此...
  • 《你必须知道的495C语言问题》

    热门讨论 2010-03-20 16:41:18
    我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此...
  • 我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此...
  • 我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此...
  • 我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此...
  • 我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此...
  • 新手学习C++入门资料

    2008-12-28 23:58:50
    在当时,面向对象编程还是一个比较的理念,Stroustrup博士不是从头开始设计语言,而是在C语言的基础上进行创建。这就是C++语言。 1985年,C++开始在外面慢慢流行。经过多年的发展,C++已经有了多个版本。为次...
  • 我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数,如此往复...
  • 我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数,如此往复...
  • 我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数,如此往复...
  • 7、实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 void DeleteNode(DuNode *p) { p->prior->next=p->next; p->next->prior=p->prior; } void InsertNode(DuNode *p, DuNode *s)//Node "s...
  • 题目:给定一个链表,交换两个相邻的节点,并返回头节点。 例子:给定 1->2->3->4,返回 2->1...思路:我们可以创建一个新的头节点phead,phead.next = head,然后我们每次交换之后更新这个phead的next指针,并且更新指

    题目:给定一个链表,交换两个相邻的节点,并返回头节点。

    例子:给定 1->2->3->4,返回 2->1->4->3;

    这道题看上去很简单,其实也很简单,交换两个节点并不难,难在如何让前面已经交换过的一对节点能正确地和后面那对交换过的节点链接起来!

    思路:我们可以创建一个新的头节点phead,phead.next = head,然后我们每次交换之后更新这个phead的next指针,并且更新指向phead的指针,就可以啦!

    举个例子:

    最开始时,我们的链表是这样:

                                 

    现在我们交换1和2(让2指向1,1指向3):

                                

    然后更新phead.next和ph以及a和b:

                               

    这样1和2就正确的完成了交换,并且ph.next将在下一步更新时指向交换后的3和4中的4!

    我们来看一下代码:

    别忘了注意代码的鲁棒性!当head为nullptr时程序不能崩溃!

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* swapPairs(ListNode* head) 
        {
            //这个指针ph->next指向每一个交换对的第一个节点
            //我们会在每次交换完成后将其赋值以使得每对节点可以正确链接
            ListNode phead = ListNode(0);
            phead.next = head;
            ListNode *ph = &phead;
            ListNode *a = nullptr, *b = nullptr;
            
            //当a或者b为nullptr的时候就可以结束了
            //如果链表有偶数个节点,则最后一步时a为nullptr,退出循环
            //如果链表有奇数个节点,则最后一步使b为nullptr,退出循环
            //一旦a为nullptr就不用再检验第二个条件了,所以这里不会造成程序崩溃
            while((a = ph->next) && (b = a->next))
            {
                //交换
                a->next = b->next;
                b->next = a;
                //更新起始节点
                ph->next = b;
                //开始下一对的交换
                ph = a;
            }
            
            return phead.next;
        }
    };

    下面是运行结果:



    展开全文
  • 你必须知道的495C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    1.6 我似乎不能成功定义一个链表。我试过typedef struct f char *item; NODEPTR next; g *NODEPTR; 但是编译器报了错误信 息。难道在C语言中一个结构不能包含指向自己的指针吗? . . . . 3 1.7 怎样建立和理解非常...
  • A2-链接列表-源码

    2021-02-09 01:16:56
    对于这些算法,您不应创建新列表并返回该列表,而应仅操作调用该方法的列表对象( this关键字表示的对象)。 a4软件包还包含用于实现链表的代码。 Node类是我们表示组成列表的Node的方式,而LinkedList类具有...
  • 1.3.6 假如给你一个新产品,你将从哪些方面来保障它的质量? 1.3.7 请评估一下程序的执行结果? 华为篇 2.1.0 static有什么用途?(请至少说明两种) 2.1.1 引用与指针有什么区别? 2.1.2 描述实时系统的...
  • sesvc.exe 阿萨德

    2019-06-02 17:11:12
    根据当前 key 的 hashcode 定位到具体的桶中判断是否为空,为空表明没有 Hash 冲突就直接在当前位置创建一个新桶即可。 如果当前桶有值( Hash 冲突),那么就要比较当前桶中的 key、key 的 hashcode 与写入的 key...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    选择树的一个节点时,如何得到这个节点? 70.向编辑框中输入字符时,如何控制只输入整数? 71.描述使用JDBC连接数据库的过程 72.EJB分为几类?什么是BMP,CMP? 73.什么是JNDI? 74.ADO是什么?ActiveX数据对象,是...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

如何创建并返回一个新链表