当前位置: 首页 > news >正文

选做旅游网站的课题分析武昌网站建设制作

选做旅游网站的课题分析,武昌网站建设制作,国外网站推荐,商城门户网站源码一、链表的回文结构 思路#xff1a; 找到链表的中间节点#xff0c;然后逆置链表的后半部分#xff0c;再一一遍历链表的前半部分和后半部分#xff0c;判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…一、链表的回文结构 思路 找到链表的中间节点然后逆置链表的后半部分再一一遍历链表的前半部分和后半部分判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分 遍历链表前半部分和后半部分 如果left和right指向的数据不相等就跳出循环返回false如果遍历到left或者right为NULL数据都相等那么链表具有回文结构返回true。 这里如果是奇数个节点 遍历结束后 class PalindromeList { public://找链表中间节点ListNode* Listmid(ListNode* phead){ListNode* fast, *slow;fastslowphead;while(fast fast-next){slowslow-next;fastfast-next;}return slow;}//逆置ListNode* reverse(ListNode* phead){ListNode* l1,*l2,*l3;l1NULL;l2phead;while(l2){l3l2-next;l2-nextl1;l1l2;l2l3;}return l1;}bool chkPalindrome(ListNode* A) {// write code here//找到链表中间节点ListNode* midListmid(A);//逆置后半部分ListNode* phead reverse(mid);//比较ListNode* left, *right;leftA;rightphead;while(right left){if(right-val!left-val){return false;}leftleft-next;rightright-next;}return true;} }; 二、相交链表 判断两个链表是否相交如果相交就返回相交节点如果链表不相交那就返回NULL 思路 先遍历两个链表记录两个链表的节点个数再同时遍历两个链表 让节点个数多的链表先往前走s链表的节点个数差同时遍历两个链表如果指向链表的指针相等就返回当前节点如果遍历链表结束后都没有相等的节点那就返回NULL。 typedef struct ListNode ListNode; struct ListNode* getIntersectionNode(struct ListNode* headA,struct ListNode* headB) {if (headA NULL) {return NULL;}if (headB NULL) {return NULL;}int sizeA 0, sizeB 0;ListNode *l1, *l2;l1 headA;l2 headB;while (l1) {sizeA;l1 l1-next;}while (l2) {sizeB;l2 l2-next;}ListNode* shortList headA;ListNode* longList headB;int s abs(sizeA - sizeB);if (sizeA sizeB) {shortList headB;longList headA;}while (s) {s--;longList longList-next;}while (longList shortList) {if (longList shortList) {return longList;}longList longList-next;shortList shortList-next;}return NULL; } 三、环形链表1 判断 链表中是否存在环如果存在就返回true如果不存在就返回false 思路快慢指针 定义两个指针fast和slow遍历链表fast每次向前走两步slow每次向前走一步如果链表存在环fast与slow指针一定会相遇如果遍历链表fast或者fast-next为NULL则链表不存在环。 根据题目所给示例来分析一下 首先定义两个指针 fast  slow fast向前走两步slow向前走一步 fast向前走两步slow向前走一步 fast向前走两步slow向前走一步 此时fast和slow相遇证明链表中存在环返回true。 如果链表不存在环结构遍历过程中fast或者fast-next指针会等于NULL将这个作为结束条件即可。 typedef struct ListNode ListNode; bool hasCycle(struct ListNode *head) {ListNode* fast, *slow;fastslowhead;while(fast fast-next){fastfast-next-next;slowslow-next;if(slow fast){return true;}}return false; } 四、环形链表2 上面只是让我们判断链表是否带环这道题让我们返回链表环的起始节点如果不存在环就返回NULL。 思路 使用快慢指针找到快慢指针的相遇节点再定义两个指针从相遇节点和链表头结点开始遍历两个指针相遇时的节点就是链表环的起始节点。 根据题目的示例来分析 先找到链表快慢指针的相遇节点 定义两个指针从链表头部和相遇节点开始遍历链表 遍历链表直到两个指针相遇 两个指针相遇此时指针指向的节点就是链表环的起始节点。 typedef struct ListNode ListNode; ListNode* hasCycle(struct ListNode *head) {ListNode* fast, *slow;fastslowhead;while(fast fast-next){fastfast-next-next;slowslow-next;if(slow fast){return slow;}}return NULL; } struct ListNode *detectCycle(struct ListNode *head) {//找到快慢指针相遇节点ListNode* poshasCycle(head);if(posNULL){return NULL;}//从头结点和相遇节点开始遍历ListNode* ptailhead;while(1){if(posptail){return pos;}pospos-next;ptailptail-next;} } 五、随机链表的复制 这里题目上提到了一个深拷贝 思路 先在原链表的基础上创建节点形成新的链表再给链表节点的random指针赋值最后断开新链表和原链表的连接即可。 深拷贝原链表 拷贝过后 给random指针赋值 断开新链表和原链表之前的连接 这样就深拷贝了原链表返回新链表的头节点即可。 typedef struct Node Node; // 创建节点 Node* BuyNode(int x) {Node* newnode (Node*)malloc(sizeof(Node));newnode-next newnode-random NULL;newnode-val x;return newnode; } // 深拷贝 void CopyList(Node** head) {Node* ptail *head;Node* next NULL;while (ptail) {next ptail-next;Node* newnode BuyNode(ptail-val);newnode-next next;ptail-next newnode;ptail next;} } void Connect(Node** head) {Node* ptail *head;Node* copy (*head)-next;while (ptail) {copy ptail-next;if (ptail-random)copy-random ptail-random-next;ptail copy-next;} } struct Node* copyRandomList(struct Node* head) {if (head NULL){return NULL;} // 深拷贝原链表CopyList(head);// 连接random指针Connect(head);// 断开链表Node* ptail head;Node* newhead head-next;Node* copy head-next;while (ptail-next-next) {ptailcopy-next;copy-next copy-next-next;copy copy-next;}return newhead; }
http://www.w-s-a.com/news/484598/

相关文章:

  • 怎样看网站是谁做的马鞍山什么房产网站做的好
  • 西安推荐企业网站制作平台软装设计方案ppt
  • 网站静态页模板专业网站设计开发公司
  • 手机免费在线搭建网站短网址生成防红
  • 天津网站设计网站制作如何新建wordpress
  • 山东省建设备案网站审批国际新闻最新消息10条简短
  • 成都市建设网扬尘监控网站短域名转换
  • 怎么做手机网站潍坊建设银行网站
  • 做网站分什么软件品牌设计培训
  • 太原网站设计排名设计本装修效果图
  • 网站个人中心模板石家庄网站系统开发
  • 优秀的电子商务网站教育公司网站建设文案
  • 网站开发市场成本网站链接推广工具
  • 猪八戒做网站排名常州seo博客
  • wordpress 网站遭篡改如何优化公司的网站
  • 汉中公司做网站网站建设的风格设置
  • 网站建议怎么写怎么做网页连接
  • 站长工具seo综合查询下载安装软件平台搭建包括哪几个方面
  • 做网站怎么存放视频支付功能网站建设
  • 庆阳手机网站设计兰州网站的优化
  • 企业网站托管有必要吗项目管理资格证书
  • 检索类的网站建设个人博客网页模板图片
  • 贵阳网站建设搜q479185700做网站有什么语言好
  • 制作公司主页网站贵阳网站建设技术托管
  • 广西建设网站网址多少钱南京江北新区地图
  • 网站建设及优化 赣icp外包服务美剧
  • wordpress添加菜单深圳优化网站排名
  • 免费下载建设银行官方网站重点专业建设验收网站
  • 建行官方网站登录怎样制作悬浮的WordPress
  • 建设一个网站需要几个角色广告设计与制作就业前景