单链表求交点,问题如下:
使用o(1)的空间复杂度,求两个链表相交的时候的交点,这个思想就类似于使用o(1)的空间复杂度和o(n)的时间复杂度来求链表的第k个节点。
过程如下:
算法实现如下:get_intersection_node
函数
/*获取交叉链表的节点*/
Data *get_intersection_node(Data *headA, Data *headB) { int lenA;int lenB;lenA = get_len(headA);lenB = get_len(headB);/*平衡较长的链表,缩减长度*/if (lenA > lenB) { headA = equal_link(lenA,lenB,headA);} else { headB = equal_link(lenB,lenA,headB);}while(headA && headB) { /*本代码用于测试,根据链表的data域进行判断,正规是判断两链表指针域是否相等*/if(headA->data == headB->data) { return headA;}headA = headA -> next;headB = headB -> next;}return NULL;
}
源码实现如下:
#include
#include typedef struct link_list { int data;struct link_list *next;
}Data;void print_list(Data *head) { while (head) { printf("%d ",head->data);head = head -> next;}printf("
");
}Data *insert_tail(Data *head, int n) { head = (Data *)malloc(sizeof(Data));head -> next = NULL;Data *r = head;int data;while(n--) { Data *p = (Data *)malloc(sizeof(Data));scanf("%d", &data);p -> data = data;r -> next = p;r = p;p -> next = NULL;}return head;
}/*获取链表的长度*/
int get_len(Data *head) { int len = 0;while (head -> next) { len ++;head = head -> next;}return len;
}/*将较长的链表长度缩减指定的差值*/
Data *equal_link(int longLen, int shortLen, Data *head) { int delta = longLen - shortLen;while (head && delta) { head = head -> next;delta --;}return head;
}/*获取交叉链表的节点*/
Data *get_intersection_node(Data *headA, Data *headB) { int lenA;int lenB;lenA = get_len(headA);lenB = get_len(headB);if (lenA > lenB) { headA = equal_link(lenA,lenB,headA);} else { headB = equal_link(lenB,lenA,headB);}while(headA && headB) { /*本代码用于测试,根据链表的data域进行判断,正规是判断两链表指针域是否相等*/if(headA->data == headB->data) { return headA;}headA = headA -> next;headB = headB -> next;}return NULL;
}
int main() { Data *headA;Data *headB;Data *result;printf("construct first link list :
");headA = insert_tail(headA,5);printf("construct second link list :
");headB = insert_tail(headB, 3);result = get_intersection_node(headA,headB);if (result){ printf("intersection node is %d
",result -> data);}else { printf("there is no intersection node
");}return 0;
}
输出如下:
construct first link list :
1 2 3 4 5
construct second link list :
3 4 5
intersection node is 3
学习计划 MyPlan11 主题:Python描述统计、简单统计图形 时间:8.5-8.11周内完成 参考资料:新书《谁说菜鸟不会数据分析python篇》 各位星友们,在这个星球里每个人都要逼迫自己学习未知的领域或知识点,每天进步一点点,积累的时间久了 ,菜鸟也能起飞。 完成情况: 在pandas中,使用describe函数进行描述统...
利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。 TCPServer/UDPS...
题目:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。 示例: 你可以将以下二叉树: 1 / 2 3 / 4 5 序列化为 "[1,2,3,null,null,4,5]" 解题: /*** Definition for a binary tree no...
sd.js import $global from "./global"; import $g from "./sg"; import $ from "jquery"; import {Message, Loading} from "element-ui";//引入饿了么相关组件 import {Base64} from "js-...
原生sd.js---------------------------------------------------------------- const API_ROOT_URL = "http://www.api.com";const $d= {_postList_url: API_ROOT_URL + "/api...