数据结构基本操作
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 · 229 阅读 · 0 评论 -
leetcode 有效的括号,stack实现。
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。实现的思路(传统方式):1压栈的是左括号([,(,{)2遇到右括号出站。3stack为空,字符串为空的情况下返回true不足:额外申请空间,代码长又长,还不如使用指针和数组做啊(凋零)struct list { char str; struct list *next;};原创 2022-04-20 09:52:53 · 236 阅读 · 0 评论 -
leetcode判断是否是回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。解题思路:1 0<=inode<listlen/2,压入stack中,后半段与压入栈中的数据做比较,所有相同则返回true2奇偶情况不同bool isPalindrome(struct ListNode* head){ struct ListNode *stack; struct ListNode *np; struct ListNode原创 2022-04-14 17:37:23 · 459 阅读 · 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 · 1064 阅读 · 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 · 658 阅读 · 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 · 274 阅读 · 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 · 1010 阅读 · 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 · 339 阅读 · 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 · 514 阅读 · 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 · 736 阅读 · 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 · 158 阅读 · 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 · 153 阅读 · 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 · 707 阅读 · 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 · 283 阅读 · 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 · 90 阅读 · 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 · 298 阅读 · 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 · 538 阅读 · 0 评论