链表练习2PAT乙级1025/甲级1074:反转链表 算法思路:将链表分块,每k个节点一块,针对每块中的节点进行反转操作反转链表的伪代码 设该区域头节点为head,定义指针p,q,r p=head; q=p->next p->next = null; while(k--){ r = q->next; q->next = p->next; p->next = q; q = r; }循环结束r指向下一组的开头,所以可以返回r作下一组的头指针 然后可以采用递归实现算法,需要注...
掌握数据结构和算法,尤其是链表,面试编程题经常考下面是用尾插法创建链表#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<malloc.h>
#include <string.h>typedef struct node {int data;struct node *next;
}Node;Node *LinkListCreat(int n)//链表创建函数{Node *p;Node *head,*rear;int i = 0; Node *Tal;head = (Node *)malloc(sizeof(Node));rear = head;rear->next = NULL;for (i = 0; i < n; i++){p = (Nod...
# include <stdio.h># include <malloc.h># include <stdlib.h> typedef struct Node{ int data; //数据域 struct Node *pNext;//指针域 } NODE, *PNODE; //NODE 等价于 struct Node PNODE等价于 struct Node * //函数声明 PNODE create_list(void); void traverse_list(PNODE pHead); int main(void) { PNODE pHead =NULL;// 等价于struct PNODE * pHead=NULL pHead=create_list(); //创建一个非循环单链表,并将该链表...
我们维护两个指针, 它们之间的距离为n。然后。我将这两个指针同步地在这个单链表上移动,保持它们的距离 为n不变。那么,当第二个指针指到空时。第一个指针即为所求。#include <iostream>struct Node
{int data;Node* next;
};void initList(Node* vNode)
{for (int i=0; i < 20; ++i){Node* TempNode = new Node;TempNode->data = i;TempNode->next = vNode->next;vNode->next = TempNode;}
}Node* getNthBackWards(const N...
链表必须清楚掌握链表定义struct ListNode
{int val;ListNode *next;
};创建链表头ListNode* creat()//创建头{struct ListNode *node=(struct ListNode *)malloc(sizeof(struct ListNode));node->next=NULL;return node;
}创建一个新节点(插入时调用)ListNode* make_node(int num)//建新节点{struct ListNode *node=(struct ListNode *)malloc(sizeof(struct ListNode));node->val=num;node->next=NULL;return node;
}插入新节点...
1 链表反转例1:LeetCode 206。本题虽然简单但却是众多公司的面试问题。反转前后的图示如下: 在反转的过程中主要是依据指针之间的移动,如下图所示:class Solution {public ListNode reverseList(ListNode head) {ListNode prev = null;while (head != null) {//1 每次修改前先把head.next备份否则head修改后找不到head.nextListNode nextTemp = head.next; //2 修改head.next temp用来保存的是上次头节点的信息head.next = prev...
假设链表中每一个节点的值都在0~9之间,那么链表整体就可以代表一个整数给定两个链表的头节点head1和head2,请生成代表两个整数相加值的结果链表 传统做法 先把链表生成 整数 然后相加 这样的有个溢出问题介绍一种做法: 利用栈结构求解: 1、 将两个链表分别从左到右遍历,遍历过程中将值压栈,这样就生成了两个链表节点的逆序栈s1 和 s2。2、将s1和s2同步弹出,这样相当于两个链表从低位到高位一次弹出,在这个过程中生成相加链表...
#include <stdio.h>#include <stdlib.h>#define OVERFLOW -2#define OK 1#define ERROR 0typedef int ElemType;//单向链表结构体typedef struct LNode { ElemType data; struct LNode *next;}LNode,*LinkList;LinkList CreateList_L(LinkList L,int n);void TraverseList_L(LinkList L);int GetElem_L(LinkList L,int i,ElemType *e);LinkList ListInsert_L(LinkList L,int i,ElemType e);LinkList ListDelete(LinkList L,in...
1.树是一种数据结构,树的一些相关的术语:
结点的度:一个结点的后继结点的个数。
树的度:树中度值最大的结点的度被称为树的度。
树的深度:树的层次数。
分支结点:度值大于0的结点,分支结点至少含有一个后继,分支结点也称为非终端结点。
叶子结点:树中的度值为0的结点。
双亲结点:树中某个结点的前驱结点,也成为父节点。
子女结点:树中某结点的后继结点。
兄弟结点:树中同一层的结点。
2.二叉树
(1)二叉树是一种特殊的...
题目描述:Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.给定一个有序的链表,要求构建一颗平衡二叉查找树。解析:二叉查找树的中序遍历的结构就是一颗二叉查找树,要使得最终的二叉查找树的结构尽可能的平衡,也就是说只需要将左右两边的节点数尽可能的均匀,(注意,此处的均匀是一个递归的概念,也就是说每一个节点的左右子树的节点个数都应该尽量均匀)。我们...
1.单链表代码:包含了尾插法,插入,删除操作。有头结点的单链表也是为了在第一个位置插入和删除时候容易,不需要另外讨论#include<stdio.h>
#include<stdlib.h>
typedef struct Linklist
{
int key;
Linklist *next;
}Linklist;
Linklist* create_end()
{
Linklist *head=(Linklist *)malloc(sizeof(Linklist));
Linklist *e,*p;
e=head;
printf("输入值?以#结束\n");
int ch;
while((scanf("%d",&ch))==1)
{ p=(...
链表的插入初始条件:1.带有头结点的链表 2.插入位置 i 3.插入的节点Node基本操作:假设p指向某个节点 q指向被插入的节点 则可以执行的是在p之后插入节点 初始化:1.p=L 指向头结点 2.j=1寻找第i-1个结点: while(j<i){ p=p->next; j++; }这样最终指向的是第i-1个结点;i的不同情况:1.i<1 直接跳出 2.1<=i<=length 可以正常执行 3.i=length+1 在链表末尾插入数据 4.i>length+1 出现空指针异...
如图完全二叉树(存在单分支)对应的二叉链表求空指针域即求先孩子结点个数×2再+1(此处的1就是单分支结点的空指针域)深度为9的完全二叉树前8层是满二叉树,共2?-1=255个结点第9层有500-255=245个结点(245为奇数可知其父结点一定有单分支),其父结点个数为244/2+1=123(其中有一个单分支结点)第8层有2?=128个结点,其中叶子结点个数128-123=5(不明白看下图)所以空指针域个数=245×2+5×2+1=501个 纯手打不容易,希望有帮...
【024-Swap Nodes in Pairs(成对交换单链表的结点)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题 Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed. 题目大意 给定一...
【114-Flatten Binary Tree to Linked List(二叉树转单链表)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题 Given a binary tree, flatten it to a linked list in-place. For example, Given 1/ 2 5/ \ 3 4 6 The flattened tree should look like: 1 2 3 4 5 6题目大意 给定一棵二叉树,将它转成单链表,使用原地算法。 解题思...