package com.chen.test;/*** @Description: 手写一个单向链表* @Author chenjianwen* @Date 2021/3/11**/
public class MySingleLinkedList<E> {private Node<E> first; //该链表的头节点private Node<E> last; //该链表的尾节点private int size; //该链表的大小/*** 从头部加入* @param e*/public void linkFirst(E e){Node<E> firstNode = first;Node<E> newNode = new Node<>();newNode.e = e;first = newNode;newNode.next = ...
单链表增加删除2.节点删除1.节点插入1.节点插入题目来源于PTA本题要求实现带头结点的单链表插入操作,插入成功返回1,否则返回0。函数接口定义:int insert_link ( LinkList L,int i,ElemType e);L是单链表的头指针,i为插入位置,e是插入的数据元素,插入成功返回1,否则返回0。裁判测试程序样例:#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*Lin...
如题 (总结)首节点也存放了值,所以ListNode t = listNode; 直接从头开始遍历即可.
简单题目,但是构建的时候出了点问题,毕竟需要自己简单测测.
掌握链表的构建方法, 还要根据题目给的一段ListNode 代码来合理修改
.
注意, 面向题解答案编程后发现, 最后的链表末尾是不设置结点的!坑!https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-...
题目 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K 为 10,则输出应该为 -4→-6→-2→7→0→5→10→18→11。 输入格式: 每个输入包含一个测试用例。每个测试用例第 1 行给出:第 1 个结点的地址;结点总个数,即正整数N ( ≤ 1 0 5 ...
解题思路:链表,每次都放在最前面的位置# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution:# 返回从尾部到头部的列表值序列,例如[1,2,3]def printListFromTailToHead(self, listNode):ptemp=listNoderet=[]while ptemp:ret.insert(0,ptemp.val)#每次都插入到最前面的位置。ptemp=ptemp.nextreturn ret
LeetCode刷题篇—206.反转链表
题目思路求解方法
题目
反转一个单链表。
思路
最近因为很多链表里的问题都涉及到了递归的方法,所以又重新深入思考了一些递归的问题,今天这道题分享迭代和递归两种思路。 在链表类型的题目当中,经常用到的一个小技巧就是创建一个dummy节点,和一个记录head节点的cur节点。 一、迭代法 (1) 原本的顺序是1->2->3,初始dummy节点为NULL,即(dummy,1->2->3)*cur = head记录头节点,指向1。 当cu...
单链表
初始化!!!
head = -1; //头节点
idx = 0; //当前能用的下标向头节点插入
void add_head(int num){v[idx] = num;ne[idx] = head;head = idx ++;
}向第k个数后插入
void add(int k,int num){v[idx] = num;ne[idx] = ne[k];ne[k] = idx ++;
}删除第k个数后面的数(注意头节点特判)
void remove(int k){if(k < 0) head = ne[head]; //这种情况说明是删除头节点后面的数,传进来的是k-1else ne[k] = ne[ne[k]];
}
160.相交链表
解题思路
package leadcode;import leadcode.lib.ListNode;/*** @author : icehill* @description : 相交链表* 编写一个程序,找到两个单链表相交的起始节点。* 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3* 输出:Reference of the node with value = 8* 输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。* 从各自的表头开始算起,链表 A 为 [4,1...
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct DuLNode {int data;DuLNode *prior,*next;
};
void InitSList(DuLNode *&SL) {//初始化双链表 SL=(DuLNode*)malloc(sizeof(DuLNode));SL->prior=SL->next=NULL;
}
void createSList(DuLNode *&SL) {//创建双链表 DuLNode *s,*r;r=SL;while(1) {s=( DuLNode*)malloc(sizeof(DuLNode)); cin>>s->data; if(s->data==-1)break;r->next=s;s->prior=r;r=s;...
数据结构链表源码数据结构链表源码,仅供自己复习专用。#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>typedef struct Node{int data;struct Node *next;
}node,*linklist;linklist List;int get(linklist L,int i)
{int j=1;linklist p;p=L->next;while (p&&j<i){p=p->next;++j;}if(!p&&j>i)return -1;return (p->data);
}int insert(linklist L,int i,int val)
{int j=1;linklist p,s;p=L;while...
2021-03-27:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = 1→2→3→4→5, k = 2,输出:4→5→1→2→3。
福大大 答案2020-03-27:
1.找尾节点并且计算链表节点个数。2.如果k大于等链表节点个数,需要取模,k一定在[0,节点个数)范围之内。如果k=0,直接返回头节点。3.求倒数k+1的节点。4.缓存倒数第k节点ans。5.尾节点连头节点。6.倒数k+1节点的Next指针为空。7.返回ans。
代码用golang编...
程序员成长之旅——合并两个有序链表题目简介LeetCode
题目简介LeetCode
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
typedef struct ListNode Node;
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){if(l1 == NULL){return l2;}else if(l2 == NULL){return l1;}Node* l = NULL;if(l1->val > l2->val){l = l2;l2 = l2->next;}else{l...
浅析JDK8的HashMap红黑数与链表相互转化
JDK8之后,引入了红黑树存储结构。在面试当中,当问到链表存储什么时候转化为红黑树时,一般回答是当同一个hashcode值下,数据个数超过8个时,数据结构转化为红黑树。 那么事实上,HashMap底层实现代码片段,先会去判断同一个hashcode值下,数据个数是否 >=7 ,之后调用treeifyBin方法for (int binCount = 0; ; ++binCount) {if ((e = p.next) == null) {p.next = newNode(hash, key, value...
6-2 递归程序设计方法练习--递归输出单链表 (10 分)
本题要求用递归方法编写递归函数实现无头结点单链表的输出操作函数。L是一个不带头结点的单链表,函数void ListPrint_L_Rec(LinkList L)要求用递归的方法输出无头结点之单链表中各个元素的值,每个元素的前面都有一个空格(包括首元素)。递归思想可借鉴下述代码中链表创建的递归函数。
函数接口定义:void ListPrint_L_Rec(LinkList L);其中 L 是一个不带头结点的单链表。
裁...
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。 示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。 解法:publicstaticclass ListNode {privateint val;...