- 如何翻转一个单链表呢。在翻转单链表的时候,一,我们需要保留下一个节点,二,对链表节点节点进行翻转。最后返回一个节点,该节点为翻转链表后新的头节点。
- #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;
}
运行结果:
可变参数当然还有逼得处理方法。