时代的一粒灰,落到个人头上,就是一座山。谁也没有想到2020的开头以新冠状病毒肺炎这只黑天鹅拉开序幕。
有人说“2019年可能会是过去十年里最差的一年,却是未来十年里最好的一年”。没想到预言竟然快成真了
2020年应届高校毕业生数量达874万人,同比增长40万人,创历史新高。其中很多将会进入到软件行业中。
经过多年的发展,现在编程技术不再高大上,入行门槛不再高。培训机构比比皆是,通过培训轻松月入过万,阶段性的实现了价值目标。大四学生不喜欢本专业,自己拿本书学习也能找到不错的公司以实习生的身份入门。00后从幼儿园开始学习编程软件,懂奥数不再厉害,会编程才是加分项,小学生会编软件操作机器人的比比皆是……
有人说:从前人人都是产品经理,如今人人都可以是程序员,程序员都被列入“十大高危行业”了,还有35岁清退论什么的……然而清退的永远不是年龄,而是思维和进取心。学习是永恒的主题,在技术日新月异发展的现在,作为IT工作者也必须时刻学习新的技术,时代淘汰是不打招呼的。
我太难了~
还记得当初的一次面试,和蔼的面试官然我手撸一个单链表并逆序?我一听,好熟悉的感觉,应该没什么问题,直接开撸。什么创建节点结构体,写创建方法,写逆序函数,没错,函数名称写的都很正确,然而实现的时候确愣住了~怎么就写的那么生涩呢。日常工作中都被语言的语法糖和相关的库给宠坏了啊,平时没事也没实现过啊……
归根到底还是没有对原理充分理解。
在此记录一下实现吧,也算是给自己温故一下吧
头文件linkList.h
#pragma once
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct Node {
int data;
Node *next;
}ListNode;
//创建链表
ListNode *createList(int n);
//打印链表
void printList(ListNode *head);
//链表插入,在第K位后面插入
ListNode * insert(ListNode *head, int k, int data);
//链表逆序
ListNode *resverse(ListNode *head);
实现linkList.cpp
#include "linkList.h"
//创建链表
ListNode *createList(int n) {
ListNode *head = NULL;
ListNode *curr = NULL;
for (int i = 0; i < n; i++) {
//创建一个节点
ListNode *p = new ListNode();
p->data = i;
//设置头节点
if (curr == NULL) {
curr = p;
head = curr;
}
//指针指向下一节点
else {
curr->next = p;
curr = curr->next;
}
}
//最后指向NULL
curr->next = NULL;
//返回头节点的指针
return head;
}
//链表遍历
void printList(ListNode *head) {
if (head == NULL) {
return;
}
ListNode *curr = head;
while (curr) {
cout << curr->data << endl;
curr = curr->next;
}
}
//链表插入,在第K位后面插入
ListNode * insert(ListNode *head, int k, int data) {
if (head == NULL) {
return NULL;
}
ListNode *curr = head;
ListNode *next = NULL;
int pos = 1;
while (curr) {
if (pos == k) {
ListNode *newNode = new ListNode();
newNode->data = data;
next = curr->next;
curr->next = newNode;
newNode->next = next;
}
pos++;
curr = curr->next;
}
return head;
}
//链表逆序
ListNode *resverse(ListNode *head) {
if (head == NULL) {
return NULL;
}
ListNode *curr = head;
ListNode *pre = NULL;
ListNode *next = NULL;
while (curr) {
next = curr->next;
curr->next = pre;
pre = curr;
curr = next;
}
return pre;
}
int main(int argc, char *argv[]) {
ListNode * p = createList(10);
printList(p);
ListNode * r = resverse(p);
printList(r);
ListNode * i = insert(r, 3, 11);
printList(i);
getchar();
return 0;
}