
数据结构基本操作
missAthin
code code
展开
-
leetcode,有效的括号(对不齐的思维)
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 数组实现:始终是不能向官方对齐啊,思维差别真的很大,由于白天板砖,晚上休息时间在(象征性)干互联网无关的副业啊。成年人的时间。。 char match(char s) { if(s==')') return s='('; if(s==']') return s='['; if(s=='..原创 2022-04-21 17:52:15 · 239 阅读 · 0 评论 -
leetcode 有效的括号,stack实现。
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 实现的思路(传统方式): 1压栈的是左括号([,(,{) 2遇到右括号出站。 3stack为空,字符串为空的情况下返回true 不足:额外申请空间,代码长又长,还不如使用指针和数组做啊(凋零) struct list { char str; struct list *next; };原创 2022-04-20 09:52:53 · 246 阅读 · 0 评论 -
leetcode判断是否是回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 解题思路: 1 0<=inode<listlen/2,压入stack中,后半段与压入栈中的数据做比较,所有相同则返回true 2奇偶情况不同 bool isPalindrome(struct ListNode* head){ struct ListNode *stack; struct ListNode *np; struct ListNode原创 2022-04-14 17:37:23 · 466 阅读 · 0 评论 -
leetcode 合并两个链表,cai
给你两个链表list1 和list2,它们包含的元素分别为n 个和m 个。 请你将list1中下标从 a 到 b 的全部节点都删除,并将list2接在被删除节点的位置。 struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2) { struct ListNode *head; struct ListNode *start; stru...原创 2022-04-13 11:58:44 · 1085 阅读 · 0 评论 -
leetcode反转链表,写成了链表转化为stack,输出,算不算思路不对?
给你单链表的头节点head,请你反转链表,并返回反转后的链表。 struct ListNode* reverseList(struct ListNode* head) { struct ListNode *cur=NULL; struct ListNode *save; struct ListNode *stack; if(!head) return NULL; while(head) { save=head->n..原创 2022-04-01 17:27:37 · 666 阅读 · 0 评论 -
leetcode 旋转链表
给你一个链表的头节点head,旋转链表,将链表每个节点向右移动k个位置。 解题思路:(传统的思维模式aaaa(笨办法))根据旋转k值,拆分和拼接链表的结果: struct ListNode* rotateRight(struct ListNode* head, int k){ int listlen=0; int listep=0; struct ListNode *listail; struct ListNode *nodestep; nodestep...原创 2022-04-01 15:03:22 · 286 阅读 · 0 评论 -
leetcode 有序链表合并
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 解题思路:传统做法:设置虚拟节点,一个pointer。遍历。(lk) struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){ struct ListNode *listhead; struct ListNode *cur; if(!list1||!list2)原创 2022-03-29 10:23:11 · 1022 阅读 · 0 评论 -
leetcode 两两交换链表中的节点
解题中注意的问题: 1手动草稿纸上绘图: 传统思维模式:使用pointer1,pointer2,pointer3交换链表节点。 2 交换节点的时候,注意被交换节点->next的继承,防止丢失 3每次step控制控制步数。 代码是普通思维模式的下交换链表节点。为了遍历的时候方便,加入虚拟头节点hd。 struct ListNode* swapPairs(struct ListNode* head){ struct ListNode * step1; struct List原创 2022-03-25 10:47:04 · 345 阅读 · 0 评论 -
刷题不尽我意,跟官方思路差了好远
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。 struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ struct ListNode *np; struct ListNode *node=NULL; int listlen=0; int first=0; int last=0; int inode=0; np=head; while(np) ..原创 2022-03-22 09:54:06 · 524 阅读 · 0 评论 -
leetcode 两数相加,在ubuntu上编译通过,显示结果了,在leetcode上报错了,找错在哪?
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0开头 * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* a...原创 2022-03-16 15:38:39 · 755 阅读 · 1 评论 -
两个栈实现一个队列
用两个栈实现队列,支持队列的基本操作。 实现基本思路是:对栈做两次压入(push)操作,第一次压栈是先入后出的操作,比如1,2,3,4,5,6,如栈后按照入栈顺序由栈顶到栈底部为6,5,4,3,2,1,第二次对入栈的数字,再次push,顺序由从栈顶到栈底为1,2,3,4,5,6,最后对栈pop,出栈顺序为1,2,3,4,5,6.从第一次入栈到出栈,模拟队列,实现先进先出的顺序。 datatype get_stack_data(lstack *ls) { struct node * inode;原创 2022-03-04 14:30:55 · 171 阅读 · 0 评论 -
push and pop list_stack ,get mindata ,print it
实现一个特殊的栈,在实现栈的基础上,在实现返回栈中最小元素的操作。 int if_push_stack(lstack * datastack,lstack *minstack,datatype data) { datastack=push_stack(datastack,data); if(!datastack) return -1; if(minstack==NULL) { minstack=push_stack(minstack,dat原创 2022-03-03 10:42:43 · 162 阅读 · 0 评论 -
队列的基本操作和实现
初始化队列的函数: void init_lkqueue(lkqueue *lq) { pointer node; node=(pointer)malloc(sizeof(*node)); if(!node) return; lq->fron=lq->rear=node; node->next=NULL; } 判断队列是否为空: int empty_lkqueue(lkqueue *lq) { if(lq->re原创 2022-03-01 16:00:40 · 750 阅读 · 0 评论 -
sort data of stack from max to min
栈内元素为整形,实现从栈顶到栈底大到小的排序。要求:最多只许申请一个栈,可以申请新的变量,但是不能申请新的数据结构。 int sort_data_of_stack(lstack * stack) { lstack * help=NULL; datatype stackdata,cure; help=(pointer)malloc(sizeof(*help)); if(!help) return -1; help->top=NULL;原创 2022-02-28 13:57:03 · 290 阅读 · 0 评论 -
stack of list
int push_lkstack(lkstack *st,datatype data) { struct node *inode; inode=(struct node *)malloc(sizeof(*inode)); if(!inode) return -1; inode->next=st->top; inode->data=data; st->top=inode; return 1; } int po.原创 2022-02-28 09:54:37 · 105 阅读 · 0 评论 -
double list
尾插法创建双链表 dlklist create_d_list(dpointer dlist) { dpointer dnode,rear; int i; dlist=(dpointer) malloc(sizeof(*dlist)); if(!dlist) return NULL; rear=dlist; for (i=1;i<12;i++) { dnode=(dpointer)malloc(sizeof(..原创 2022-02-25 09:45:19 · 319 阅读 · 0 评论 -
code list
创建链表的时候减少了null pointer的检测次数,体现在给链表加入了一个表头,这样就不用每次判断链表是否为空的情况,在尾端插入链表节点的时候,每加入一个节点就把rear指针指向新加入的节点,减少了每次插入前需要遍历链表的烦恼。 lklist create_list_fron() { pointer node,hlist; hlist=(pointer)malloc(sizeof(*hlist)); if(!hlist) return NULL; hl原创 2022-02-24 16:30:01 · 574 阅读 · 0 评论