Java兩種方式實現連結串列的刪除,返回頭結點
標題:Java兩種方式實現連結串列的刪除,返回頭結點
Java兩種方式實現連結串列的刪除,返回頭結點。
方式一:分是否是刪除第一個節點
public ListNode del(ListNode head,int n) {
//head==null
if(head==null) {
return head;
}
if(n<1) {
return null;//輸入不合法
}
//head 1 //若是再生成一個指標放在前面,則不需要分 1 和 n
if(n==1) {
return head.next;
}
//head n
int count=1;
ListNode p=head;
ListNode s=head;
while(count<n && p!=null) {
s=p;
p=p.next;
count++;
}
if(p!=null) {
s.next=p.next;
}
return head;
}
方式二:生成一個新的節點,放在head的前面,使得不需要分是否刪除第一個節點head
public ListNode del02(ListNode head,int n) {
//head==null
if(head==null) {
return head;
}
if(n<1) {
return null;//輸入不合法
}
ListNode newHead=new ListNode(-1);
newHead.next=head;
int count=1;
ListNode p=head;
ListNode s=newHead;
while(count<n && p!=null) {
s=p;
p=p.next;
count++;
}
if(p!=null) {
s.next=p.next;
}
return newHead.next;
}
完整程式碼如下:
/**
* 兩種方式實現連結串列的刪除
* @author dell
*
*/
public class GiveLinkAndArrToDel {
/**
* 連結串列的刪除
* @param head
* @param n
* @return
*/
public ListNode del(ListNode head,int n) {
//head==null
if(head==null) {
return head;
}
if(n<1) {
return null;//輸入不合法
}
//head 1 //若是再生成一個指標放在前面,則不需要分 1 和 n
if(n==1) {
return head.next;
}
//head n
int count=1;
ListNode p=head;
ListNode s=head;
while(count<n && p!=null) {
s=p;
p=p.next;
count++;
}
if(p!=null) {
s.next=p.next;
}
return head;
}
/**
* 刪除,新生成一個節點
* @param head
* @param n
* @return
*/
public ListNode del02(ListNode head,int n) {
//head==null
if(head==null) {
return head;
}
if(n<1) {
return null;//輸入不合法
}
ListNode newHead=new ListNode(-1);
newHead.next=head;
int count=1;
ListNode p=head;
ListNode s=newHead;
while(count<n && p!=null) {
s=p;
p=p.next;
count++;
}
if(p!=null) {
s.next=p.next;
}
return newHead.next;
}
public void printAll(ListNode head) {
if(head==null) {
return ;
}else {
System.out.print(head.val+" ");
this.printAll(head.next);
}
}
@Test
public void test() {
ListNode a1 = new ListNode(1);
ListNode a2 = new ListNode(2);
ListNode a3 = new ListNode(4);
ListNode a4 = new ListNode(5);
ListNode a5 = new ListNode(6);
a1.next=a2;
a2.next=a3;
a3.next=a4;
a4.next=a5;
System.out.println("輸出所有節點");
this.printAll(a1);
int n=1;
ListNode del = this.del02(a1, n);
System.out.println("\n刪除後");
this.printAll(del);
}
}
相關文章
- 連結串列面試題(一)---刪除一個無頭單連結串列的非尾結點面試題
- 帶頭結點的單連結串列實現(C++)C++
- C\C++之用結構體實現連結串列的建立、遍歷、結點插入、結點刪除C++結構體
- 雙向連結串列————查詢、刪除、插入結點
- 單連結串列的插入刪除操作(c++實現)C++
- 連結串列面試題(六)---刪除單連結串列倒數第k個結點面試題
- 實戰資料結構(2)_兩個單連結串列間的刪除操作資料結構
- Day4(連結串列)|24. 兩兩交換連結串列中的節點 & 19.刪除連結串列的倒數第N個節點 & 面試題 02.07. 連結串列相交 &142.環形連結串列II面試題
- **24. 兩兩交換連結串列中的節點****19.刪除連結串列的倒數第N個節點****面試題 02.07. 連結串列相交****142.環形連結串列II**面試題
- 帶頭結點的連結串列操作題
- 19. 刪除連結串列的倒數第 N 個結點
- 用連結串列的方式實現大數相減-Java實現Java
- Java連結串列指標確實好煩 - 交換連結串列中連續的兩個節點的位置Java指標
- Day 4 | 24. 兩兩交換連結串列中的節點 、 19.刪除連結串列的倒數第N個節點 、面試題 02.07. 連結串列相交 、142.環形連結串列II面試題
- 單向迴圈連結串列——查詢、刪除、插入結點
- 連結串列-單連結串列實現
- leetcode----刪除連結串列中的節點LeetCode
- 資料結構實驗之連結串列七:單連結串列中重複元素的刪除資料結構
- 第四天:● 24. 兩兩交換連結串列中的節點 ● 19.刪除連結串列的倒數第N個節點 ● 面試題 02.07. 連結串列相交 ● 142.環形連結串列II面試題
- 【LeetCode連結串列#9】圖解:兩兩交換連結串列節點LeetCode圖解
- Java雙向連結串列的實現Java
- 程式碼隨想錄演算法訓練營第4天 | 連結串列兩兩交換、刪除倒N、連結串列相交、環形連結串列演算法
- java實現連結串列反轉Java
- java實現雙向連結串列Java
- 刪除陣列中的元素(連結串列)陣列
- C語言實現帶表頭結點單連結串列的初始化、查詢、插入、刪除、輸出、撤銷等操作C語言
- JZ76 刪除連結串列中重複的節點
- 連結串列基礎2(超簡單)--單連結串列的插入和刪除
- c語言單連結串列的實現,包括連結串列的建立、插入、查詢、刪除、列印、長度計算C語言
- 單連結串列實現增刪改查
- 連結串列面試題(十三)---求兩個都不帶環的連結串列相交的結點面試題
- 建立連結串列兩種方法的區別
- 連結串列以及golang介入式連結串列的實現Golang
- Linux核心連結串列-通用連結串列的實現Linux
- 程式碼隨想錄day4 | 24 兩兩交換連結串列節點 19 刪除倒數第n個節點 142 環形連結串列
- 程式碼隨想錄第4天 | 24. 兩兩交換連結串列中的節點、19.刪除連結串列的倒數第N個節點、面試題 02.07. 連結串列相交、142.環形連結串列II面試題
- 程式碼隨想錄演算法訓練營第四天 | 連結串列 24.兩兩交換連結串列中的節點 19.刪除連結串列的倒數第N個節點 142.環形連結串列II演算法
- java實現單連結串列、棧、佇列三種資料結構Java佇列資料結構