mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
Merge pull request #4 from rakshaa2000/master
More documentation and testing
This commit is contained in:
commit
74947cecb4
@ -58,7 +58,6 @@
|
|||||||
* [Edit Distance](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/edit_distance.cpp)
|
* [Edit Distance](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/edit_distance.cpp)
|
||||||
* [Egg Dropping Puzzle](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/egg_dropping_puzzle.cpp)
|
* [Egg Dropping Puzzle](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/egg_dropping_puzzle.cpp)
|
||||||
* [Fibonacci Bottom Up](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/fibonacci_bottom_up.cpp)
|
* [Fibonacci Bottom Up](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/fibonacci_bottom_up.cpp)
|
||||||
* [Fibonacci Top Down](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/fibonacci_top_down.cpp)
|
|
||||||
* [Floyd Warshall](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/floyd_warshall.cpp)
|
* [Floyd Warshall](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/floyd_warshall.cpp)
|
||||||
* [Kadane](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/kadane.cpp)
|
* [Kadane](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/kadane.cpp)
|
||||||
* [Longest Common String](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/longest_common_string.cpp)
|
* [Longest Common String](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/dynamic_programming/longest_common_string.cpp)
|
||||||
|
109
data_structures/linked_list_delete_without_head.cpp
Normal file
109
data_structures/linked_list_delete_without_head.cpp
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* \brief Delete a node in a linked list without the head pointer
|
||||||
|
* \details
|
||||||
|
* This algortihm helps delete a node in a linked list without the access of a head pointer
|
||||||
|
* @author rakshaa2000
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Delete without a head pointer.
|
||||||
|
/*You are given a pointer/ reference to the node which is to be deleted from the linked list of N nodes. The task is to delete the node. Pointer/ reference to head node is not given.
|
||||||
|
Note: No head reference is given to you.*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Example 1:
|
||||||
|
|
||||||
|
Input:
|
||||||
|
N = 3
|
||||||
|
value[] = {1,2,3}
|
||||||
|
node = 1
|
||||||
|
Output: 2 3
|
||||||
|
Explanation: After deleting 1 from the
|
||||||
|
linked list, we have remaining nodes
|
||||||
|
as 2 and 3.
|
||||||
|
|
||||||
|
Example 2:
|
||||||
|
|
||||||
|
Input:
|
||||||
|
N = 4
|
||||||
|
value[] = {70,20,60,30}
|
||||||
|
node = 20
|
||||||
|
Output: 40 60 30
|
||||||
|
Explanation: After deleting 20 from
|
||||||
|
the linked list, we have remaining
|
||||||
|
nodes as 40, 60 and 30.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
//Driver Code starts
|
||||||
|
//Linked list node structure
|
||||||
|
struct Node{
|
||||||
|
int data;
|
||||||
|
Node *next;
|
||||||
|
explicit Node(int x){
|
||||||
|
data=x;
|
||||||
|
next=nullptr;
|
||||||
|
}
|
||||||
|
} *head;
|
||||||
|
|
||||||
|
//To search for the given node
|
||||||
|
Node *findNode(Node *head, int search){
|
||||||
|
Node *cur= head;
|
||||||
|
while(cur!=nullptr){
|
||||||
|
if(cur->data==search)
|
||||||
|
break;
|
||||||
|
cur=cur->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//To populate the linked list
|
||||||
|
void insert(){
|
||||||
|
int i=0, n, value;
|
||||||
|
Node *temp;
|
||||||
|
scanf("%d",&n);
|
||||||
|
for(int i=0; i<n; i++){
|
||||||
|
scanf("%d", &value);
|
||||||
|
if(i==0){
|
||||||
|
head= new Node(value);
|
||||||
|
temp=head;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
temp->next=new Node(value);
|
||||||
|
temp=temp->next;
|
||||||
|
new Node(value);
|
||||||
|
temp->next=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//To print the entire list
|
||||||
|
void printList (Node *node){
|
||||||
|
while(node!=NULL){
|
||||||
|
printf("%d",node->data);
|
||||||
|
node=node->next;
|
||||||
|
}
|
||||||
|
std::cout<<endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Driver Code Ends
|
||||||
|
|
||||||
|
//Function to locate the node to be deleted
|
||||||
|
void deleteNode(Node *m)
|
||||||
|
{
|
||||||
|
*m=*m->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Main function
|
||||||
|
int main(){
|
||||||
|
int k;
|
||||||
|
insert();
|
||||||
|
scanf("%d",&k);
|
||||||
|
Node *del= findNode(head,k);
|
||||||
|
if(del!=NULL && del->next!=NULL){
|
||||||
|
deleteNode(del);
|
||||||
|
}
|
||||||
|
printList(head);
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,22 +0,0 @@
|
|||||||
#include <iostream>
|
|
||||||
using namespace std;
|
|
||||||
int arr[1000000];
|
|
||||||
int fib(int n) {
|
|
||||||
if (arr[n] == -1) {
|
|
||||||
if (n <= 1)
|
|
||||||
arr[n] = n;
|
|
||||||
else
|
|
||||||
arr[n] = fib(n - 1) + fib(n - 2);
|
|
||||||
}
|
|
||||||
return arr[n];
|
|
||||||
}
|
|
||||||
int main(int argc, char const *argv[]) {
|
|
||||||
int n;
|
|
||||||
cout << "Enter n: ";
|
|
||||||
cin >> n;
|
|
||||||
for (int i = 0; i < n + 1; ++i) {
|
|
||||||
arr[i] = -1;
|
|
||||||
}
|
|
||||||
cout << "Fibonacci number is " << fib(n) << endl;
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -6,13 +6,10 @@
|
|||||||
* This solution takes in input as a vector and output as a boolean to check if you can reach the last position.
|
* This solution takes in input as a vector and output as a boolean to check if you can reach the last position.
|
||||||
* @author [Rakshaa Viswanathan](https://github.com/rakshaa2000)
|
* @author [Rakshaa Viswanathan](https://github.com/rakshaa2000)
|
||||||
*/
|
*/
|
||||||
//Jump Game:
|
|
||||||
/*Given an array of non-negative integers, you are initially positioned at the first index of the array.
|
|
||||||
Each element in the array represents your maximum jump length at that position.
|
|
||||||
Determine if you are able to reach the last index.*/
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include<iostream>
|
#include<iostream>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
//Implements the algorithm
|
//Implements the algorithm
|
||||||
/*We name the indices good and bad based on whether we can reach the destination if we start at that position.
|
/*We name the indices good and bad based on whether we can reach the destination if we start at that position.
|
||||||
@ -22,6 +19,11 @@ Determine if you are able to reach the last index.*/
|
|||||||
*If yes, then that is the last position you can reach starting from the back.
|
*If yes, then that is the last position you can reach starting from the back.
|
||||||
*After the end of the loop, if we reach the lastPos as 0, then the destination can be reached from the start position.
|
*After the end of the loop, if we reach the lastPos as 0, then the destination can be reached from the start position.
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* @brief This function implements the above algorithm
|
||||||
|
* @param vector of nums containing the maximum jump (in steps) from that index
|
||||||
|
* @return returns bool value whether final index can be reached or not
|
||||||
|
*/
|
||||||
bool canJump(std::vector<int> nums) {
|
bool canJump(std::vector<int> nums) {
|
||||||
auto lastPos = nums.size() - 1;
|
auto lastPos = nums.size() - 1;
|
||||||
for (auto i = nums.size() - 1; i >= 0; i--) {
|
for (auto i = nums.size() - 1; i >= 0; i--) {
|
||||||
@ -32,13 +34,35 @@ bool canJump(std::vector<int> nums) {
|
|||||||
return lastPos == 0;
|
return lastPos == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Function to test above algorithm
|
||||||
|
*/
|
||||||
|
void test(){
|
||||||
|
//Test 1
|
||||||
|
std::vector<int> num1={4,3,1,0,5};
|
||||||
|
assert(canJump(num1)==true);
|
||||||
|
std::cout<<"Input: ";
|
||||||
|
for(auto i: num1){
|
||||||
|
std::cout<<i<<" ";
|
||||||
|
}
|
||||||
|
std::cout<<"Output: true"<<std::endl;
|
||||||
|
//Test 2
|
||||||
|
std::vector<int> num2={3,2,1,0,4};
|
||||||
|
assert(canJump(num2)==false);
|
||||||
|
std::cout<<"Input: ";
|
||||||
|
for(auto i: num2){
|
||||||
|
std::cout<<i<<" ";
|
||||||
|
}
|
||||||
|
std::cout<<"Output: false"<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Main function
|
* @brief Main function
|
||||||
* @returns 0 on exit
|
* @returns 0 on exit
|
||||||
*/
|
*/
|
||||||
int main(){
|
int main(){
|
||||||
//Sample test case
|
test();
|
||||||
std::vector<int> num={4,3,1,0,5};
|
|
||||||
std::cout<<canJump(num); //Should display true, as when you take one step from position 0, you reach position 1, from which 3 steps lead you to the destination
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user