题目1:调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:主要的问题在于不能乱了之前的相对位置,用了两个循环,第一个遍历数组,第二个里面判断是不是奇数,如果是就判断它前面是不是有偶数,有的话就依次和这些偶数交换
class Solution { public: void reOrderArray(vector<int> &array) { for(int i=0;i<array.size();i++){ if(array[i]%2!=0){ for(int j=i;j>0;j--){ if(array[j-1]%2==0){ int temp = array[j-1] ; array[j-1] = array[j] ; array[j] = temp ; }else{ break ; } } } } } };
题目二:链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点
思路:双指针
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { ListNode* p1 = pListHead; ListNode* p2 = pListHead; while(p1!=NULL){ if(k==0){ p2 = p2->next ; p1 = p1->next ; }else{ k-- ; p1 = p1->next ; } } if(k!=0) p2 = NULL ; return p2 ; } };
题目三:反转单项链表
思路:记录pre和next就行了
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { ListNode* pre = NULL; ListNode* next = NULL; while(pHead!=NULL){ next = pHead->next ; pHead->next = pre ; pre = pHead ; pHead = next ; } return pre ; } };