求1+2+…+n
题目:
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例
输入: n = 3
输出: 6
一开始看到这个题觉得挺简单的,看完题之后才发现不能使用if 等一系列语句,这一下难度就变了
这道题虽然不能使用if、for,但是可以使用逻辑运算符:逻辑与&&
逻辑与有个短路效果。
a&&b:这样做运算,如果a为假,则直接结束这条语句,不再执行b语句;
于是利用这种特性就可以完成这道题
int sumNums(int n){
return Sum(n);
}
int Sum(int n)
{
n && (n += Sum(n-1));
return n;
}
反转链表
题目
反转一个单链表。
示例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
这个就是反转链表比较简单,就直接做了。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *p = NULL,*q=head;
while(q != NULL)
{
struct ListNode *tmp = q->next;
q->next = p;
p=q;
if(tmp == NULL) break;
q=tmp;
}
return q;
}