都忘光了,拿来复习一小下
运行环境Win7 VS2010
题目是某年和某年华为的某几道上机题目,题目不去找了。
【第一个】
就是实现一个方法,将链表倒序。
#include "stdafx.h" #include<iostream> typedef struct tagListNode{ int value; struct tagListNode *next; }ListNode; void converse(ListNode **head){ ListNode *currentNode = *head; ListNode *privNode = NULL; ListNode *nextNode = NULL; while(currentNode!=NULL){ nextNode = (*currentNode).next; (*currentNode).next = privNode; privNode = currentNode; currentNode = nextNode; } *head = privNode; } void PrintList(ListNode **head){ ListNode *currentNode = *head; while(currentNode!=NULL){ printf_s("%d",(*currentNode).value); currentNode = (*currentNode).next; } printf_s(" "); } void main(){ ListNode *head; ListNode *body1; ListNode *body2; ListNode *tail; head = (ListNode *)malloc(sizeof(ListNode)); body1 = (ListNode *)malloc(sizeof(ListNode)); body2 = (ListNode *)malloc(sizeof(ListNode)); tail = (ListNode *)malloc(sizeof(ListNode)); (*head).next = body1; (*head).value = 1; (*body1).next = body2; (*body1).value = 2; (*body2).next = tail; (*body2).value = 3; (*tail).next = NULL; (*tail).value = 4; ListNode **phead = &head; PrintList(phead); converse(phead); PrintList(phead); getchar(); }
结构体做链表的时候是要申请内存的。
*pi = i;和pi = &i;的理解
二级指针还是得再理解理解。
这块为啥用二级指针呢,因为这个函数不是靠返回值的,操作完之后,链表的头是之前的尾巴,如果我们只是将链表的头传进来,注意链表的头指向的地址是结构体的地址,如果我们粗暴地让它指向尾巴,那么这个结构体就丢了,当然可以通过一系列交换操作,但是毫无疑问会很麻烦。用二级指针的话,这个二级指针是一个链表以外的东西,链表无论怎么动,这个东西指向谁都可以再去确定。也就是在我们操作完之后再叫二级指针指向尾巴就好了。
【第二个】
将字符串里面的所有空格换成逗号,多个换成一个。
#include "stdafx.h" #include<iostream> using namespace std; void DevideString(const char *pInputStr, long lInputLen, char *pOutputStr){ int i, j; for(i=0; pInputStr[i]==' '; i++); for(j=0; i<lInputLen; i++){ if(pInputStr[i]!=' '){ pOutputStr[j] = pInputStr[i]; j++; }else if(pInputStr[i+1]!=' '){ pOutputStr[j] = ','; j++; }else{ ; } } pOutputStr[j] = ','; pOutputStr[j+1] = '