给出一个链表,每个节点有一个数值,你需要返回链表奇数位置的数值之和,位置从1开始计数。
例如链表为1->2->4->5->6你需要返回11
#include<stdio.h>
#include <algorithm>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode():val(0), next(NULL){};
ListNode(int val):val(val), next(NULL){}
};
//you just need submit this function
int oddSum(ListNode *head){
//place your code here
}
int main(){
int size = rand() % 1000 + 1;
ListNode *dummy = new ListNode(0);
ListNode *prev = dummy;
int middleValue = 0, sum = 0;
for (int i = 1; i <= size; i++){
int val = rand() % 100000;
if (i % 2) sum += val;
ListNode *temp = new ListNode(val);
prev->next = temp;
prev = temp;
}
if (sum == oddSum(dummy->next)){
puts("YES");
} else{
puts("NO");
}
return 0;
}
代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode():val(0), next(NULL){};
ListNode(int val):val(val),next(NULL){};
};
//每次都让 指针p 走两步,直到走完整个链表
int oddSum(ListNode *head)
{
int result = 0;
ListNode *p = head;
while(p != NULL){
result += p->val;
p = p->next->next;
}
return result;
}
int main()
{
int size = rand() % 1000 + 1;
ListNode *dummy = new ListNode(0);
ListNode *prev = dummy;
int middleValue = 0, sum = 0;
for(int i = 1; i <= size; i++){
int val = rand() % 100000;
if(i % 2)
sum += val;
ListNode *temp = new ListNode(val);
prev->next = temp;
prev = temp;
}
if(sum == oddSum(dummy->next)){
puts("YES");
}else{
puts("NO");
}
return 0;
}