删除链表节点(链表倒置)
来源:互联网 发布:机房环境监控系统源码 编辑:程序博客网 时间:2024/06/09 15:25
import java.util.Stack;class Nodes{ int data ; Nodes next; Nodes(){} Nodes(int data) { this.data = data; this.next = null; }}class LinkeNodes{ //create public Nodes create(){ Nodes head = new Nodes(); Nodes p = head; for(int i=0;i<5;i++) { p.next = new Nodes(); p.next.data = i+1; p = p.next; } return head; } //用栈实现从尾到头输出链表 public void printRev(Nodes head){ if(head==null) return ; Nodes p = head.next; Stack s = new Stack(); while(p!=null) { s.push(p); p = p.next; } while(!s.empty()){ Nodes n = (Nodes)s.pop(); System.out.print(n.data + " "); } } //用递归实现倒输出链表 void printResByBack(Nodes head){ if(head!=null) { if(head.next!=null) { printResByBack(head.next); } System.out.print(head.data + " "); } }// 打印链表 static void print(Nodes head){ while(head!=null) { System.out.print(head.data+" "); head = head.next; } }**//deleteNode() O(1)= ((n-1)*O(1) + O(n)/2) static void deleteNode(Nodes head,Nodes x){ if(head == null || x == null) return ; //不是尾节点 if(x.next!=null){ Nodes temp = x.next; x.next = temp.next; x.data = temp.data; } //只有一个节点,,头结点(尾节点) else if(head == x){ head = null; }else { //尾节点 x = null; } }}** **//链表倒置 static Nodes linkedTableRecursively(Nodes head) { if(head == null) return null; Nodes pNode = head,recHead = null; Nodes pre = null; Nodes pNext = null; while(pNode!=null) { pNext = pNode.next; if(pNode.next == null) recHead = pNode; pNode.next = pre; pre = pNode; pNode = pNext; } return recHead; }**public class Linke { public static void main(String[] args) { LinkeNodes lk = new LinkeNodes(); Nodes head = lk.create(); /*System.out.print("stack实现:"); lk.printRev(head); System.out.print("\n递归实现:"); lk.printResByBack(head.next);*/ lk.print(head); lk.deleteNode(head, new Nodes(2));}}
删除节点两种方法:
1、从头结点开始遍历,找到待删除的节点q的前驱p,让p指向q的下一个节点。
2、直接用待删除q的下一个节点来覆盖节点q,这样就相当于删除节点q了,时间 复杂度为O(1)。(这种是基于一个假设:待删除节点在链表中,实际上我们需要花费O(n)的时间来判断待删除节点 是否在表中,受到O(1)的限制,我们不得不把确保节点在表中交给方法的调用者)
0 0
- 删除链表节点(链表倒置)
- k组倒置链表节点
- 链表创建,显示,删除和倒置
- 删除链表节点
- 删除链表节点
- 删除链表节点
- 删除链表节点
- 链表删除节点
- 倒置链表(数据结构)
- 链表倒置
- 链表的倒置
- 链表倒置
- 链表倒置
- 链表倒置
- 实现链表倒置
- 链表倒置(逆序)
- 链表的倒置
- [笔试]链表倒置
- 对于Intent和IntentFilter的理解记录
- 使用MediaPlayer和SurfaceView播放视频
- HTML中表格的属性
- repair
- 空间配色解密
- 删除链表节点(链表倒置)
- 介绍一下python getopt 模块
- 程序员技术练级攻略
- 自定义cell
- hdu 3033 I love sneakers! 分组背包
- iOS中宏定义的使用与规范
- 杂记
- expect交互命令
- Web Service学习笔记