This commit is contained in:
Emanuele Slusarz
2026-05-12 14:55:17 +02:00
parent e4d2eb3ab8
commit 646f4dc077
596 changed files with 100235 additions and 13951 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
#Sun May 10 18:29:39 CEST 2026 #Tue May 12 13:59:16 CEST 2026
host=DESKTOP-ALBQHEK host=DESKTOP-ALBQHEK
process-id=13748 process-id=5624
user=eslusarz user=eslusarz
+179
View File
@@ -712,3 +712,182 @@ user global configuration and to define the default location to store repositori
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
EGit might behave differently since they see different configuration options. EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.
!SESSION 2026-05-11 17:50:40.634 -----------------------------------------------
eclipse.buildId=4.39.0.20260305-0817
java.version=21.0.10
java.vendor=Eclipse Adoptium
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_GB
Framework arguments: -product org.eclipse.epp.package.java.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product
!ENTRY ch.qos.logback.classic 1 0 2026-05-11 17:51:16.095
!MESSAGE Activated before the state location was initialized. Retry after the state location is initialized.
!ENTRY ch.qos.logback.classic 1 0 2026-05-11 17:51:21.877
!MESSAGE Logback config file: C:\Users\eslusarz\Documents\eclipse-workspace\.metadata\.plugins\org.eclipse.m2e.logback\logback.2.7.101.20251017-1242.xml
!ENTRY org.eclipse.e4.ui.workbench 4 0 2026-05-11 17:51:24.468
!MESSAGE Unable to load class 'org.eclipse.e4.ui.workbench.renderers.swt.cocoa.CocoaUIHandler' from bundle '147'
!STACK 0
java.lang.ClassNotFoundException: org.eclipse.e4.ui.workbench.renderers.swt.cocoa.CocoaUIHandler cannot be found by org.eclipse.e4.ui.workbench.renderers.swt_0.17.0.v20260131-0926
at org.eclipse.osgi.internal.loader.BundleLoader.generateException(BundleLoader.java:570)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:564)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:439)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:195)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:663)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:88)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:59)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:37)
at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:276)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:603)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:583)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:185)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:219)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:615)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:563)
at org.eclipse.equinox.launcher.Main.run(Main.java:1415)
!ENTRY org.eclipse.egit.ui 2 0 2026-05-11 17:51:48.540
!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git
user global configuration and to define the default location to store repositories: 'C:\Users\eslusarz'. If this is
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.
!ENTRY org.eclipse.jdt.ui 4 2 2026-05-11 22:27:29.855
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jdt.ui".
!STACK 0
java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.core.dom.CompilationUnit.getModule()" because "astRoot" is null
at org.eclipse.jdt.internal.ui.text.correction.proposals.AddModuleRequiresCorrectionProposalCore.createAddRequiresChange(AddModuleRequiresCorrectionProposalCore.java:87)
at org.eclipse.jdt.internal.ui.text.correction.proposals.AddModuleRequiresCorrectionProposalCore.createChange(AddModuleRequiresCorrectionProposalCore.java:73)
at org.eclipse.jdt.core.manipulation.ChangeCorrectionProposalCore.getChange(ChangeCorrectionProposalCore.java:153)
at org.eclipse.jdt.internal.ui.text.correction.UnresolvedElementsBaseSubProcessor.getCompositeChangeProposal(UnresolvedElementsBaseSubProcessor.java:1080)
at org.eclipse.jdt.internal.ui.text.correction.UnresolvedElementsBaseSubProcessor.getCompositeChangeProposal(UnresolvedElementsBaseSubProcessor.java:1072)
at org.eclipse.jdt.internal.ui.text.correction.UnresolvedElementsBaseSubProcessor.addSimilarTypeProposals(UnresolvedElementsBaseSubProcessor.java:1037)
at org.eclipse.jdt.internal.ui.text.correction.UnresolvedElementsBaseSubProcessor.collectTypeProposals(UnresolvedElementsBaseSubProcessor.java:791)
at org.eclipse.jdt.internal.ui.text.correction.UnresolvedElementsSubProcessor.getTypeProposals(UnresolvedElementsSubProcessor.java:143)
at org.eclipse.jdt.internal.ui.text.correction.QuickFixProcessor.process(QuickFixProcessor.java:450)
at org.eclipse.jdt.internal.ui.text.correction.QuickFixProcessor.getCorrections(QuickFixProcessor.java:370)
at org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor$SafeCorrectionCollector.safeRun(JavaCorrectionProcessor.java:381)
at org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor$SafeCorrectionProcessorAccess.run(JavaCorrectionProcessor.java:341)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
at org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor$SafeCorrectionProcessorAccess.process(JavaCorrectionProcessor.java:336)
at org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor.collectCorrections(JavaCorrectionProcessor.java:465)
at org.eclipse.jdt.internal.ui.text.java.hover.ProblemHover$ProblemInfo.getJavaAnnotationFixes(ProblemHover.java:115)
at org.eclipse.jdt.internal.ui.text.java.hover.ProblemHover$ProblemInfo.computeCompletionProposals(ProblemHover.java:89)
at org.eclipse.jdt.internal.ui.text.java.hover.ProblemHover$ProblemInfo.<init>(ProblemHover.java:74)
at org.eclipse.jdt.internal.ui.text.java.hover.ProblemHover.createAnnotationInfo(ProblemHover.java:178)
at org.eclipse.jdt.internal.ui.text.java.hover.AbstractAnnotationHover.getHoverInfo2(AbstractAnnotationHover.java:957)
at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:165)
at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:131)
at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:89)
at org.eclipse.jface.text.TextViewerHoverManager$1.run(TextViewerHoverManager.java:155)
!ENTRY org.eclipse.jdt.ui 4 10001 2026-05-11 22:30:29.246
!MESSAGE Internal Error
!STACK 1
Java Model Exception: Error in Java Model (code 969): MyLinkedListIterator [in [Working copy] MyLinkedList.java [in list.mylinkedlist [in src [in asdl]]]] does not exist
at org.eclipse.jdt.internal.core.JavaElement.newNotPresentException(JavaElement.java:548)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:591)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:294)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:280)
at org.eclipse.jdt.internal.core.SourceRefElement.getSourceRange(SourceRefElement.java:258)
at org.eclipse.jdt.internal.core.Member.getJavadocRange(Member.java:322)
at org.eclipse.jdt.core.manipulation.internal.javadoc.CoreJavadocAccess.getHTMLContentFromSource(CoreJavadocAccess.java:359)
at org.eclipse.jdt.core.manipulation.internal.javadoc.CoreJavadocAccess.getHTMLContent(CoreJavadocAccess.java:229)
at org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2.getHTMLContent(JavadocContentAccess2.java:49)
at org.eclipse.jdt.internal.ui.text.java.hover.AbstractAnnotationHover$AnnotationInformationControl.createJavadocProposal(AbstractAnnotationHover.java:365)
at org.eclipse.jdt.internal.ui.text.java.hover.AbstractAnnotationHover$AnnotationInformationControl.deferredCreateContent(AbstractAnnotationHover.java:336)
at org.eclipse.jdt.internal.ui.text.java.hover.AbstractAnnotationHover$AnnotationInformationControl.setInput(AbstractAnnotationHover.java:204)
at org.eclipse.jface.text.AbstractInformationControlManager.internalShowInformationControl(AbstractInformationControlManager.java:1178)
at org.eclipse.jface.text.AbstractInformationControlManager.presentInformation(AbstractInformationControlManager.java:1147)
at org.eclipse.jface.text.AbstractHoverInformationControlManager.presentInformation(AbstractHoverInformationControlManager.java:903)
at org.eclipse.jface.text.TextViewerHoverManager.doPresentInformation(TextViewerHoverManager.java:242)
at org.eclipse.jface.text.TextViewerHoverManager.lambda$3(TextViewerHoverManager.java:232)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4122)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3738)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1051)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:684)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:583)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:185)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:219)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:615)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:563)
at org.eclipse.equinox.launcher.Main.run(Main.java:1415)
!SUBENTRY 1 org.eclipse.jdt.core 4 969 2026-05-11 22:30:29.248
!MESSAGE MyLinkedListIterator [in [Working copy] MyLinkedList.java [in list.mylinkedlist [in src [in asdl]]]] does not exist
!SESSION 2026-05-12 13:58:49.453 -----------------------------------------------
eclipse.buildId=4.39.0.20260305-0817
java.version=21.0.10
java.vendor=Eclipse Adoptium
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_GB
Framework arguments: -product org.eclipse.epp.package.java.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product
!ENTRY ch.qos.logback.classic 1 0 2026-05-12 13:59:13.439
!MESSAGE Activated before the state location was initialized. Retry after the state location is initialized.
!ENTRY org.eclipse.core.resources 2 10035 2026-05-12 13:59:16.479
!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
!ENTRY ch.qos.logback.classic 1 0 2026-05-12 13:59:17.756
!MESSAGE Logback config file: C:\Users\eslusarz\Documents\eclipse-workspace\.metadata\.plugins\org.eclipse.m2e.logback\logback.2.7.101.20251017-1242.xml
!ENTRY org.eclipse.e4.ui.workbench 4 0 2026-05-12 13:59:19.267
!MESSAGE Unable to load class 'org.eclipse.e4.ui.workbench.renderers.swt.cocoa.CocoaUIHandler' from bundle '147'
!STACK 0
java.lang.ClassNotFoundException: org.eclipse.e4.ui.workbench.renderers.swt.cocoa.CocoaUIHandler cannot be found by org.eclipse.e4.ui.workbench.renderers.swt_0.17.0.v20260131-0926
at org.eclipse.osgi.internal.loader.BundleLoader.generateException(BundleLoader.java:570)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:564)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:439)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:195)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:663)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:88)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:59)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:37)
at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:276)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:603)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:583)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:185)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:219)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:615)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:563)
at org.eclipse.equinox.launcher.Main.run(Main.java:1415)
!ENTRY org.eclipse.egit.ui 2 0 2026-05-12 13:59:35.401
!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git
user global configuration and to define the default location to store repositories: 'C:\Users\eslusarz'. If this is
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.
@@ -1,7 +1,7 @@
[ { [ {
"version" : "9.6.0-20260502004807+0000", "version" : "9.6.0-20260511004857+0000",
"buildTime" : "20260502004807+0000", "buildTime" : "20260511004857+0000",
"commitId" : "b6e68b2bcae07ceceb366b4d0a900e4e93ba4c1d", "commitId" : "d21d434e616b55c833aa59b433adf393010f40d8",
"current" : false, "current" : false,
"snapshot" : true, "snapshot" : true,
"nightly" : true, "nightly" : true,
@@ -10,11 +10,62 @@
"rcFor" : "", "rcFor" : "",
"milestoneFor" : "", "milestoneFor" : "",
"broken" : false, "broken" : false,
"downloadUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.6.0-20260502004807+0000-bin.zip", "downloadUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.6.0-20260511004857+0000-bin.zip",
"checksumUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.6.0-20260502004807+0000-bin.zip.sha256", "checksumUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.6.0-20260511004857+0000-bin.zip.sha256",
"checksum" : "85e34aa0a33686cfac1fb2e0ca79c6e4929be140ec8dae7956fb6b84241270b5", "checksum" : "6c9696b888885a574308bdead2ef69761b6fac15b21ad5f0d58d26088fda1a9c",
"wrapperChecksumUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.6.0-20260502004807+0000-wrapper.jar.sha256", "wrapperChecksumUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.6.0-20260511004857+0000-wrapper.jar.sha256",
"wrapperChecksum" : "497c8c2a7e5031f6aa847f88104aa80a93532ec32ee17bdb8d1d2f67a194a9c7" "wrapperChecksum" : "497c8c2a7e5031f6aa847f88104aa80a93532ec32ee17bdb8d1d2f67a194a9c7"
}, {
"version" : "9.6.0-milestone-2",
"buildTime" : "20260510110612+0000",
"commitId" : "62000451ad7b25de53fa89a155ef8ecb401621bb",
"current" : false,
"snapshot" : false,
"nightly" : false,
"releaseNightly" : false,
"activeRc" : false,
"rcFor" : "",
"milestoneFor" : "9.6.0",
"broken" : false,
"downloadUrl" : "https://services.gradle.org/distributions/gradle-9.6.0-milestone-2-bin.zip",
"checksumUrl" : "https://services.gradle.org/distributions/gradle-9.6.0-milestone-2-bin.zip.sha256",
"checksum" : "a67385a5e8acaed7840b5114feb76e455f6e3567e02d4414726f6fd1179753a9",
"wrapperChecksumUrl" : "https://services.gradle.org/distributions/gradle-9.6.0-milestone-2-wrapper.jar.sha256",
"wrapperChecksum" : "497c8c2a7e5031f6aa847f88104aa80a93532ec32ee17bdb8d1d2f67a194a9c7"
}, {
"version" : "9.5.1-20260510022507+0000",
"buildTime" : "20260510022507+0000",
"commitId" : "fd78213f09782e62ca4957f9cfd3d90c6c3f1767",
"current" : false,
"snapshot" : true,
"nightly" : false,
"releaseNightly" : true,
"activeRc" : false,
"rcFor" : "",
"milestoneFor" : "",
"broken" : false,
"downloadUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.5.1-20260510022507+0000-bin.zip",
"checksumUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.5.1-20260510022507+0000-bin.zip.sha256",
"checksum" : "31ee63072850e69db0372d24655dbef7680aee3afaec2442d6395fc7ca672fd2",
"wrapperChecksumUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.5.1-20260510022507+0000-wrapper.jar.sha256",
"wrapperChecksum" : "497c8c2a7e5031f6aa847f88104aa80a93532ec32ee17bdb8d1d2f67a194a9c7"
}, {
"version" : "8.14.5",
"buildTime" : "20260507110329+0000",
"commitId" : "62345becae08b13e793521816d585102fea66398",
"current" : false,
"snapshot" : false,
"nightly" : false,
"releaseNightly" : false,
"activeRc" : false,
"rcFor" : "",
"milestoneFor" : "",
"broken" : false,
"downloadUrl" : "https://services.gradle.org/distributions/gradle-8.14.5-bin.zip",
"checksumUrl" : "https://services.gradle.org/distributions/gradle-8.14.5-bin.zip.sha256",
"checksum" : "6f74b601422d6d6fc4e1f9a1ab6522f642c2fdcbc15ae33ebd30ba3d7198e854",
"wrapperChecksumUrl" : "https://services.gradle.org/distributions/gradle-8.14.5-wrapper.jar.sha256",
"wrapperChecksum" : "7d3a4ac4de1c32b59bc6a4eb8ecb8e612ccd0cf1ae1e99f66902da64df296172"
}, { }, {
"version" : "9.5.0", "version" : "9.5.0",
"buildTime" : "20260428120530+0000", "buildTime" : "20260428120530+0000",
@@ -32,23 +83,6 @@
"checksum" : "553c78f50dafcd54d65b9a444649057857469edf836431389695608536d6b746", "checksum" : "553c78f50dafcd54d65b9a444649057857469edf836431389695608536d6b746",
"wrapperChecksumUrl" : "https://services.gradle.org/distributions/gradle-9.5.0-wrapper.jar.sha256", "wrapperChecksumUrl" : "https://services.gradle.org/distributions/gradle-9.5.0-wrapper.jar.sha256",
"wrapperChecksum" : "497c8c2a7e5031f6aa847f88104aa80a93532ec32ee17bdb8d1d2f67a194a9c7" "wrapperChecksum" : "497c8c2a7e5031f6aa847f88104aa80a93532ec32ee17bdb8d1d2f67a194a9c7"
}, {
"version" : "9.5.0-20260428014943+0000",
"buildTime" : "20260428014943+0000",
"commitId" : "3fe117d68f3907790f3809f121aa36303a9151f8",
"current" : false,
"snapshot" : true,
"nightly" : false,
"releaseNightly" : true,
"activeRc" : false,
"rcFor" : "",
"milestoneFor" : "",
"broken" : false,
"downloadUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.5.0-20260428014943+0000-bin.zip",
"checksumUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.5.0-20260428014943+0000-bin.zip.sha256",
"checksum" : "95be4dddffc251cf96cb85e6b7d5b1cf9ac7aa407c12c0b1ef212d8592c98ad0",
"wrapperChecksumUrl" : "https://services.gradle.org/distributions-snapshots/gradle-9.5.0-20260428014943+0000-wrapper.jar.sha256",
"wrapperChecksum" : "497c8c2a7e5031f6aa847f88104aa80a93532ec32ee17bdb8d1d2f67a194a9c7"
}, { }, {
"version" : "9.5.0-rc-4", "version" : "9.5.0-rc-4",
"buildTime" : "20260423134125+0000", "buildTime" : "20260423134125+0000",
@@ -0,0 +1,296 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
Node<E> currentNode = head;
}
}
}
@@ -1,98 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
}
size--;
return tmp;
}
}
@@ -0,0 +1,414 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
/*
* Quando viene richiamata la add, l'elemento viene aggiunto a sinistra del cursore.
* Esempio di seguito:
* A | B
* chiamata add(X)
* A X | B
* Come detto prima la X viene aggiunta a sinistra
*/
@Override
public void add(E data) {
if (data == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(data, null, null);
// Se la lista è vuota
if (size == 0) {
tail = head = newNode;
prevNode = newNode;
size++;
posNext = 1;
return;
}
// Se il cursore è prima dell'HEAD
if (prevNode == null) {
addFirst();
}
}
}
}
@@ -0,0 +1,225 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
}
@@ -1,9 +0,0 @@
package jcf_map.exercise;
public class BinaryTreeMap {
/*
* Esercizio 1 - Esame del secondo parziale 8/1/2019
* Scrivere un metodo generico statico ContaDuplicati che conta il numero
* di oggetti duplicati (non univoci) contenuti in un albero binario.
*/
}
@@ -0,0 +1,273 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
}
}
@@ -0,0 +1,195 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if ()
}
}
}
@@ -1,51 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
}
@@ -1,96 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
} else {
}
}
}
@@ -1,85 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
}
}
@@ -1,73 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
if (size == 1) {
E tmp = head.data;
head = tail = null;
return tmp;
}
}
}
@@ -0,0 +1,273 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext = 0;
}
}
@@ -0,0 +1,202 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst(object);
}
}
}
}
}
@@ -0,0 +1,237 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
}
}
@@ -0,0 +1,393 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
@Override
public void add(E data) {
if (data == null) throw new NullPointerException();
}
}
}
@@ -1,28 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
}
@@ -0,0 +1,386 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
size--;
nextNode = nNode;
prevNode = pNode;
posNext--;
lastReturned = null;
}
}
}
@@ -0,0 +1,424 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
/*
* Quando viene richiamata la add, l'elemento viene aggiunto a sinistra del cursore.
* Esempio di seguito:
* A | B
* chiamata add(X)
* A X | B
* Come detto prima la X viene aggiunta a sinistra
*/
@Override
public void add(E data) {
if (data == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(data, null, null);
// Se la lista è vuota
if (size == 0) {
tail = head = newNode;
prevNode = newNode;
size++;
posNext = 1;
return;
}
// Se il cursore è prima dell'HEAD
if (prevNode == null) {
addFirst(data);
prevNode = head;
posNext++;
return;
}
// Se il cursore è dopo la TAIL
if (prevNode == tail) {
addLast(data);
prevNode = tail;
posNext++;
return;
}
}
}
}
@@ -0,0 +1,248 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
}
@@ -1,134 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
}
}
@@ -0,0 +1,203 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
}
// Iterazione per la ricerca dell'oggetto
Node<E> currentNode = head;
while (currentNode.next != null) {
currentNode = currentNode.next;
}
}
}
@@ -1,115 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
}
size++;
}
}
@@ -0,0 +1,399 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
/*
* Quando viene richiamata la add, l'elemento viene aggiunto a sinistra del cursore.
* Esempio di seguito:
* A | B
*/
@Override
public void add(E data) {
if (data == null) throw new NullPointerException();
}
}
}
@@ -0,0 +1,367 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
return;
}
// Se è un elemento generico
}
}
}
@@ -0,0 +1,340 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
}
}
@@ -1,12 +0,0 @@
package list.mylinkedlist;
import java.array.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E>
}
@@ -0,0 +1,334 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
}
}
}
@@ -0,0 +1,212 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
return true;
}
// Caso in cui sia l'ultimo
currentNode = tail;
if (currentNode.data.equals(object)) {
removeLast();
return true;
}
// Caso in cui non sia il primo o l'ultimo, sia quindi tra il primo e il secondo (non per forza)
currentNode = head;
while (currentNode.next != null) {
if (currentNode.data.equals(object)) {
}
currentNode = currentNode.next;
}
}
}
@@ -0,0 +1,210 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
return true;
}
// Caso in cui sia l'ultimo
currentNode = tail;
if (currentNode.data.equals(object)) {
removeLast();
return true;
}
// Caso in cui non sia il primo o l'ultimo, sia quindi tra il primo e il secondo (non per forza)
Node<E> currentNode = head;
while (currentNode.next != null) {
currentNode = currentNode.next;
}
}
}
@@ -0,0 +1,408 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
/*
* Quando viene richiamata la add, l'elemento viene aggiunto a sinistra del cursore.
* Esempio di seguito:
* A | B
* chiamata add(X)
* A X | B
* Come detto prima la X viene aggiunta a sinistra
*/
@Override
public void add(E data) {
if (data == null) throw new NullPointerException();
Node<E> newNode = new Node<E>();
// Se la lista è vuota
if (size == 0) {
tail = head = new Node<E>(data, null, null);
size++;
prevNode =
}
}
}
}
@@ -0,0 +1,239 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[];
Node<E> currentNode = head;
}
}
@@ -1,113 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
} else {
}
size++;
}
}
@@ -0,0 +1,238 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean removeRec(E object) {
if ((object == null) || (head == null)) return false;
if (head.data.equals(object)) {
removeFirst();
return true;
} else return removeRec(head.next, object);
}
private boolean removeRec(Node<E> current, E object) {
if (current == null) return false;
if (current.data.equals(object)) {
}
}
}
@@ -0,0 +1,263 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
}
@@ -1,99 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
}
size--;
return tmp;
}
}
@@ -1,59 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>();
}
}
}
@@ -0,0 +1,368 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
Node<E> removingNode = head;
Node<E> nextingNode = removingNode.next;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
return;
}
// Se è un elemento generico
}
}
}
@@ -1,22 +0,0 @@
package jcf_map.exercise;
import java.util.Map;
import binary_tree.BinaryNode;
public class BinaryTreeMap {
/*
* Esercizio 1 - Esame del secondo parziale 8/1/2019
* Scrivere un metodo generico statico ContaDuplicati che conta il numero
* di oggetti duplicati (non univoci) contenuti in un albero binario.
* Il risultato è il conteggio totale degli elementi che risultano duplicati
* (non il numero totale di occorrenze, ma il numero di oggetti distinti che
* hanno almeno un duplicato)
*/
public static <T> Map<T, Integer> ContaDuplicati(BinaryNode<T> node) {
}
protected static <T>
}
@@ -0,0 +1,212 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
return true;
}
// Caso in cui sia l'ultimo
currentNode = tail;
if (currentNode.data.equals(object)) {
removeLast();
return true;
}
// Caso in cui non sia il primo o l'ultimo, sia quindi tra il primo e il secondo (non per forza)
currentNode = head;
while (currentNode.next != null) {
if (currentNode.data.equals(object)) {
Node<E> prevNode = currentNode.prev;
}
currentNode = currentNode.next;
}
}
}
@@ -1,88 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
}
@@ -0,0 +1,219 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
return true;
}
// Caso in cui sia l'ultimo
currentNode = tail;
if (currentNode.data.equals(object)) {
removeLast();
return true;
}
// Caso in cui non sia il primo o l'ultimo, sia quindi tra il primo e il secondo (non per forza)
currentNode = head;
while (currentNode.next != null) {
currentNode = currentNode.next;
if (currentNode.data.equals(object)) {
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
}
}
}
}
@@ -0,0 +1,195 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
}
}
}
@@ -1,60 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
}
}
}
@@ -1,20 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Data
private E data;
// Riferimenti elemento precedente e successivo
private Node<E>
}
}
@@ -0,0 +1,207 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
return true;
}
// Caso in cui sia l'ultimo
currentNode = tail;
if ()
// Iterazione per la ricerca dell'oggetto
Node<E> currentNode = head;
while (currentNode.next != null) {
currentNode = currentNode.next;
}
}
}
@@ -0,0 +1,287 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
lastReturned = null;
}
}
}
}
@@ -0,0 +1,329 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
}
}
}
@@ -1,48 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
}
}
@@ -0,0 +1,206 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
return true;
}
// Caso in cui sia l'ultimo
currentNode = tail;
// Iterazione per la ricerca dell'oggetto
Node<E> currentNode = head;
while (currentNode.next != null) {
currentNode = currentNode.next;
}
}
}
@@ -0,0 +1,330 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
}
}
}
@@ -1,76 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
head.next.prev = null;
}
size--;
return tmp;
}
}
@@ -0,0 +1,271 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
}
}
@@ -0,0 +1,268 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Metodi adoperati
}
}
@@ -1,83 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
}
@@ -0,0 +1,201 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object))
// Iterazione per la ricerca dell'oggetto
Node<E> currentNode = head;
while (currentNode.next != null) {
currentNode = currentNode.next;
}
}
}
@@ -1,114 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
}
size++;
}
}
@@ -0,0 +1,300 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
Node<E> currentNode = head;
int i = 0;
while () {
}
}
}
}
@@ -0,0 +1,391 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
@Override
}
}
@@ -0,0 +1,197 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
}
}
}
}
@@ -0,0 +1,244 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i] = currentNode;
i++;
}
}
}
@@ -0,0 +1,294 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
}
}
}
}
@@ -1,59 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>
} else {
}
}
}
@@ -1,77 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
tmp = head.data;
head = tail = null;
} else {
}
size--;
return tmp;
}
}
@@ -1,54 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
}
}
@@ -0,0 +1,243 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
for () {
}
}
}
@@ -1,126 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
}
}
@@ -0,0 +1,213 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
return true;
}
// Caso in cui sia l'ultimo
currentNode = tail;
if (currentNode.data.equals(object)) {
removeLast();
return true;
}
// Caso in cui non sia il primo o l'ultimo, sia quindi tra il primo e il secondo (non per forza)
currentNode = head;
while (currentNode.next != null) {
if (currentNode.data.equals(object)) {
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
}
currentNode = currentNode.next;
}
}
}
@@ -1,24 +0,0 @@
package jcf_map.exercise;
import java.util.Map;
import binary_tree.BinaryNode;
public class BinaryTreeMap {
/*
* Esercizio 1 - Esame del secondo parziale 8/1/2019
* Scrivere un metodo generico statico ContaDuplicati che conta il numero
* di oggetti duplicati (non univoci) contenuti in un albero binario.
* Il risultato è il conteggio totale degli elementi che risultano duplicati
* (non il numero totale di occorrenze, ma il numero di oggetti distinti che
* hanno almeno un duplicato)
*/
public static <T> Map<T, Integer> ContaDuplicati(BinaryNode<T> node) {
}
protected static <T> Map<T, Integer> ContaDuplicati(BinaryNode<T> node, HashMap<T, Integer> ) {
}
}
@@ -1,37 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MuLinkedList() {
}
}
@@ -0,0 +1,239 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
}
}
@@ -0,0 +1,240 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
}
}
@@ -0,0 +1,235 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean removeRec(E object) {
if ((object == null) || (head == null)) return false;
if (head.data.equals(object)) {
removeFirst();
return true;
} else return removeRec(head.next, object);
}
private boolean removeRec(Node<E> cur, E object) {
}
}
@@ -0,0 +1,329 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
}
}
}
@@ -0,0 +1,281 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0))
}
}
}
@@ -0,0 +1,423 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
/*
* Quando viene richiamata la add, l'elemento viene aggiunto a sinistra del cursore.
* Esempio di seguito:
* A | B
* chiamata add(X)
* A X | B
* Come detto prima la X viene aggiunta a sinistra
*/
@Override
public void add(E data) {
if (data == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(data, null, null);
// Se la lista è vuota
if (size == 0) {
tail = head = newNode;
prevNode = newNode;
size++;
posNext = 1;
return;
}
// Se il cursore è prima dell'HEAD
if (prevNode == null) {
addFirst(data);
prevNode = head;
posNext++;
return;
}
// Se il cursore è dopo la TAIL
if (prevNode == tail) {
addLast(data);
prevNode = tail;
posNext++;
}
}
}
}
@@ -0,0 +1,276 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode =
}
}
}
@@ -0,0 +1,428 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
/*
* Quando viene richiamata la add, l'elemento viene aggiunto a sinistra del cursore.
* Esempio di seguito:
* A | B
* chiamata add(X)
* A X | B
* Come detto prima la X viene aggiunta a sinistra
*/
@Override
public void add(E data) {
if (data == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(data, null, null);
// Se la lista è vuota
if (size == 0) {
tail = head = newNode;
prevNode = newNode;
size++;
posNext = 1;
return;
}
// Se il cursore è prima dell'HEAD
if (prevNode == null) {
addFirst(data);
prevNode = head;
posNext++;
return;
}
// Se il cursore è dopo la TAIL
if (prevNode == tail) {
addLast(data);
prevNode = tail;
posNext++;
return;
}
// Generico
newNode.prev = nextNode;
newNode.next = prevNode;
}
}
}
@@ -1,12 +0,0 @@
package list.mylinkedlist;
implements java.array.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E>
}
@@ -1,5 +0,0 @@
package jcf_map.exercise;
public class BinaryTreeMap {
}
@@ -1,107 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>(item, null, null);
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
}
}
@@ -0,0 +1,218 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode;
// Caso in cui sia il primo
currentNode = head;
if (currentNode.data.equals(object)) {
removeFirst();
return true;
}
// Caso in cui sia l'ultimo
currentNode = tail;
if (currentNode.data.equals(object)) {
removeLast();
return true;
}
// Caso in cui non sia il primo o l'ultimo, sia quindi tra il primo e il secondo (non per forza)
currentNode = head;
while (currentNode.next != null) {
currentNode = currentNode.next;
if (currentNode.data.equals(object)) {
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
}
}
}
}
@@ -0,0 +1,211 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
}
}
}
}
@@ -1,5 +0,0 @@
package jcf_map.exercise;
public class BinaryTreeMap {
}
@@ -0,0 +1,239 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
}
}
@@ -0,0 +1,372 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
return;
}
// Se è un elemento generico
}
}
}
@@ -0,0 +1,432 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0;
lastReturned = null;
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
removeLast();
nextNode = null;
prevNode = tail;
posNext = size;
lastReturned = null;
return;
}
// Se è un elemento generico
Node<E> removingNode = lastReturned;
Node<E> nNode = removingNode.next;
Node<E> pNode = removingNode.prev;
pNode.next = nNode;
nNode.prev = pNode;
removingNode.prev = null;
removingNode.next = null;
if (lastReturned == prevNode) posNext--;
nextNode = nNode;
prevNode = pNode;
size--;
lastReturned = null;
}
/*
* Quando viene richiamata la add, l'elemento viene aggiunto a sinistra del cursore.
* Esempio di seguito:
* A | B
* chiamata add(X)
* A X | B
* Come detto prima la X viene aggiunta a sinistra
*/
@Override
public void add(E data) {
if (data == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(data, null, null);
// Se la lista è vuota
if (size == 0) {
tail = head = newNode;
prevNode = newNode;
size++;
posNext = 1;
return;
}
// Se il cursore è prima dell'HEAD
if (prevNode == null) {
addFirst(data);
prevNode = head;
posNext++;
return;
}
// Se il cursore è dopo la TAIL
if (prevNode == tail) {
addLast(data);
prevNode = tail;
posNext++;
return;
}
// Generico
newNode.prev = prevNode;
newNode.next = nextNode;
prevNode.next = newNode;
nextNode.prev = newNode;
lastReturned = null;
posNext++;
size++;
}
}
}
@@ -0,0 +1,256 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
}
@@ -0,0 +1,243 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
}
}
}
@@ -1,114 +0,0 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = new Node<E>(item, null, null);
} else {
Node<E> newNode = new Node<E>();
}
size++;
}
}
@@ -1,20 +0,0 @@
package list.mylinkedlist;
import java.util.List;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Data
private E data;
// Riferimenti elemento precedente e successivo
private Node<E>
}
}
@@ -0,0 +1,211 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
}
}
}
}
@@ -0,0 +1,227 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean removeRec(E object) {
}
}
@@ -0,0 +1,369 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
nextNode = nextNode.next;
prevNode = nextNode.prev;
posNext++;
}
}
@Override
public boolean hasNext() {
return nextNode != null;
}
@Override
public boolean hasPrevious() {
return prevNode != null;
}
@Override
public E next() {
if (!hasNext()) throw new NoSuchElementException();
E data = nextNode.data;
lastReturned = nextNode;
prevNode = nextNode;
nextNode = nextNode.next;
posNext++;
return data;
}
@Override
public E previous() {
if (!hasPrevious()) throw new NoSuchElementException();
E data = prevNode.data;
lastReturned = prevNode;
nextNode = prevNode;
prevNode = prevNode.prev;
posNext--;
return data;
}
@Override
public int nextIndex() {
return posNext;
}
@Override
public int previousIndex() {
return posNext - 1;
}
/*
* Il metodo remove si occupa della rimozione del nodo appena restituito
*/
@Override
public void remove() {
// Se non è stato restituito alcun nodo
if (lastReturned == null) throw new NoSuchElementException();
// Se l'ultimo elemento ad essere stato restituito è la testa
if (lastReturned == head) {
removeFirst();
nextNode = head; // Head dopo la rimozione del primo nodo è il successivo a quello appena rimosso
prevNode = null;
posNext = 0
return;
}
// Se l'ultimo elemento ad essere stato restituito è la coda
if (lastReturned == tail) {
return;
}
// Se è un elemento generico
}
}
}
@@ -0,0 +1,301 @@
package list.mylinkedlist;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Object[] array = new Object[size];
Node<E> currentNode = head;
int i = 0;
while (currentNode != null) {
array[i++] = currentNode;
currentNode = currentNode.next;
}
return array;
}
public boolean equals(Object object) {
return object == this;
}
// Parte iteratori
public Iterator<E> iterator() {
}
public ListIterator<E> listIterator() {
}
private class MyLinkedListIterator implements ListIterator<E> {
// Variabili adoperate
private Node<E> nextNode;
private Node<E> prevNode;
private Node<E> lastReturned = null;
private int posNext;
public MyLinkedListIterator() {
nextNode = head;
prevNode = null;
posNext = 0;
}
public MyLinkedListIterator(int index) {
if ((index < 0) || (index > size)) throw new IndexOutOfBoundsException();
// Caso in cui sia il primo
if (index == 0) {
nextNode = head;
prevNode = null;
posNext = 0;
return;
}
// Caso in cui sia l'ultimo
if (index == size) {
nextNode = null;
prevNode = tail;
posNext = size;
return;
}
nextNode = head;
prevNode = null;
posNext = 0;
while (posNext < index) {
}
}
}
}
@@ -0,0 +1,209 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
}
}
}
}
@@ -0,0 +1,238 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
public String toString() {
StringBuffer result = new StringBuffer();
for (Object x : this) result.append(x + " ");
return result.toString();
}
public boolean remove(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) {
// Caso in cui esso sia un primo nodo
if (currentNode == head) {
removeFirst();
return true;
}
// Caso in cui esso sia un ultimo nodo
if (currentNode == tail) {
removeLast();
return true;
}
// Caso in cui sia in mezzo
Node<E> prevNode = currentNode.prev;
Node<E> nextNode = currentNode.next;
prevNode.next = nextNode;
nextNode.prev = prevNode;
currentNode.prev = null;
currentNode.next = null;
size--;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public boolean contains(Object object) {
if (object == null || head == null) return false;
Node<E> currentNode = head;
while (currentNode != null) {
if (currentNode.data.equals(object)) return true;
currentNode = currentNode.next;
}
return false;
}
public Object[] toArray() {
if (head == null) return null;
Node<E> currentNode = head;
}
}

Some files were not shown because too many files have changed in this diff Show More