单链表的翻转和C++ 11 的小特性---可变参数

  1. 如何翻转一个单链表呢。在翻转单链表的时候,一,我们需要保留下一个节点,二,对链表节点节点进行翻转。最后返回一个节点,该节点为翻转链表后新的头节点。
  2. #include
    #include
    #include
    using namespace std;
    typedef struct node
    {
    int val;
    node *next;
    node(int val)
    {
    this->val = val;
    this->next = nullptr;
    }
    node()
    {
    this->next = nullptr;
    }
    }LinkNode;
    LinkNode *head = nullptr;
    void intsertLink(int val)
    {
    if (head == nullptr)
    {
    head = new LinkNode(val);
    }
    else
    {
    LinkNode *temp = head;
    while (temp->next != nullptr)
    {
    temp = temp->next;
    }
    temp->next = new LinkNode(val);
    }
    }
    void display(LinkNode *node)
    {
    while (node)
    {
    cout << node->val << " ";
    node = node->next;
    }
    cout << endl;
    }
    LinkNode *reverseLink(LinkNode *head)
    {
    if (head == nullptr)
    {
    return nullptr;
    }
    LinkNode *p1 = head;
    LinkNode *pfront = nullptr;
    LinkNode *ptemp = head;
    while (p1)
    {
    ptemp = p1->next;//保留下一个节点,这点很重要啊
    p1->next = pfront;//改变p1的指向
    pfront = p1;
    p1 = ptemp;
    }
    return pfront;
    }
    int main()
    {
    srand((unsigned)time(NULL));
    for (int i = 0; i < 10; i++)
    {
    intsertLink(rand() % 50);
    }
    display(head);
    LinkNode *headtemp = reverseLink(head);
    display(headtemp);
    system(“pause”);
    return 0;
    }
    运行结果:
    在这里插入图片描述
    C++11的可变参数
    代码如下:,处理方式之一就是通过C语言的stdarg.h进行处理。方便好用。先记着。
    #include
    #include <stdarg.h>
    #include
    using namespace std;
    int sum(int count, …)
    {
    va_list ap;
    va_start(ap, count);//从count参数开始往后算,我是这么理解的
    int sum = 0;
    for (int i = 0; i < count; i++)
    {
    sum += va_arg(ap, int);
    }
    va_end(ap);
    return sum;
    }
    void my_printf(char *format, …)
    {
    char buffer[2000];
    va_list ap;
    va_start(ap, format);//从format参数开始往后算,我是这么理解的
    vsprintf_s(buffer, 2000, format, ap);
    cout << buffer << endl;
    va_end(ap);

}
int main()
{
cout << sum(3, 1, 2, 4)<<endl;
char *format = “%s is %s”;
my_printf(format, “dog”, “animal”);
system(“pause”);
return 0;
}
运行结果:
在这里插入图片描述
可变参数当然还有逼得处理方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值