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);
}
}
相關文章
- 【連結串列問題】刪除單連結串列的中間節點
- 2024/11/27 【連結串列】LeetCode 24 兩兩交換連結串列中的節點 & LeetCode 19 刪除連結串列的倒數第N個節點LeetCode
- C\C++之用結構體實現連結串列的建立、遍歷、結點插入、結點刪除C++結構體
- 雙向連結串列————查詢、刪除、插入結點
- 【連結串列問題】打卡3:刪除單連結串列的中間節點
- leetcode----刪除連結串列中的節點LeetCode
- **24. 兩兩交換連結串列中的節點****19.刪除連結串列的倒數第N個節點****面試題 02.07. 連結串列相交****142.環形連結串列II**面試題
- Day4(連結串列)|24. 兩兩交換連結串列中的節點 & 19.刪除連結串列的倒數第N個節點 & 面試題 02.07. 連結串列相交 &142.環形連結串列II面試題
- JZ-056-刪除連結串列中重複的結點
- 【連結串列問題】打卡2:刪除單連結串列的第 K個節點
- 6-8 單連結串列結點刪除 (20 分)
- Day 4 | 24. 兩兩交換連結串列中的節點 、 19.刪除連結串列的倒數第N個節點 、面試題 02.07. 連結串列相交 、142.環形連結串列II面試題
- 19. 刪除連結串列的倒數第 N 個結點
- 用連結串列的方式實現大數相減-Java實現Java
- 單向迴圈連結串列——查詢、刪除、插入結點
- 第四天:● 24. 兩兩交換連結串列中的節點 ● 19.刪除連結串列的倒數第N個節點 ● 面試題 02.07. 連結串列相交 ● 142.環形連結串列II面試題
- 資料結構實驗之連結串列七:單連結串列中重複元素的刪除資料結構
- 連結串列-單連結串列實現
- 牛客(刪除連結串列中重複節點)
- 【LeetCode連結串列#9】圖解:兩兩交換連結串列節點LeetCode圖解
- JZ76 刪除連結串列中重複的節點
- 0011 刪除連結串列的倒數第N個節點
- C語言實現帶表頭結點單連結串列的初始化、查詢、插入、刪除、輸出、撤銷等操作C語言
- 程式碼隨想錄第4天 | 24. 兩兩交換連結串列中的節點、19.刪除連結串列的倒數第N個節點、面試題 02.07. 連結串列相交、142.環形連結串列II面試題
- 連結串列基礎2(超簡單)--單連結串列的插入和刪除
- c語言單連結串列的實現,包括連結串列的建立、插入、查詢、刪除、列印、長度計算C語言
- java實現連結串列反轉Java
- java實現雙向連結串列Java
- 13. O(1)時間刪除連結串列節點
- 程式碼隨想錄演算法訓練營第4天 | 連結串列兩兩交換、刪除倒N、連結串列相交、環形連結串列演算法
- 55-將單連結串列原地逆置(有頭結點的單連結串列)
- 單連結串列實現增刪改查
- (c語言實現)刪除有序連結串列中重複出現的元素C語言
- 程式碼隨想錄day4 | 24 兩兩交換連結串列節點 19 刪除倒數第n個節點 142 環形連結串列
- 程式碼隨想錄演算法訓練營第四天 | 連結串列 24.兩兩交換連結串列中的節點 19.刪除連結串列的倒數第N個節點 142.環形連結串列II演算法
- java實現單連結串列、棧、佇列三種資料結構Java佇列資料結構
- 資料結構__連結串列_單連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 兩個連結串列的第一個公共結點