C/C++:数据结构(单链表)

时代的一粒灰,落到个人头上,就是一座山。谁也没有想到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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值