单向单链表的java实现

本文介绍了一种使用Java实现的单链表数据结构。通过定义节点类和链表类,实现了链表的基本操作,包括添加元素、获取指定位置的元素、查找元素的位置以及删除元素等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java代码

  1. packagedatamemory.link;
  2. //单链表
  3. publicclassObjectLink
  4. {
  5. privateintsize;//链表长度
  6. privateObjectNodehead;//头节点
  7. publicvoidadd(Objectobj)
  8. {
  9. ObjectNodenode=newObjectNode(obj,null);
  10. if(head==null)
  11. {
  12. head=node;
  13. }
  14. else
  15. {
  16. ObjectNodetemp=head;
  17. while(temp.getNext()!=null)
  18. {
  19. temp=temp.getNext();//移动到最后的节点
  20. }
  21. temp.addNodeAfter(obj);
  22. size++;//表的长度+1;
  23. }
  24. }
  25. publicintgetSize()
  26. {
  27. returnsize;
  28. }
  29. publicObjectget(inti)
  30. {
  31. if(i>size-1)
  32. {
  33. returnnull;
  34. }
  35. ObjectNodetemp=head;
  36. for(intk=0;k<i;k++)
  37. {
  38. temp=temp.getNext();
  39. }
  40. returntemp;
  41. }
  42. publicintindexOf(Objectobj)
  43. {
  44. inti=0;
  45. ObjectNodenode=newObjectNode(obj,null);
  46. if(head==null)
  47. return-1;
  48. if(head.equals(node))
  49. return0;
  50. ObjectNodetemp=head;
  51. while(temp.getNext()!=null)
  52. {
  53. i++;
  54. if(temp.getNext().equals(node))
  55. {
  56. returni;
  57. }
  58. temp=temp.getNext();
  59. }
  60. return-1;
  61. }
  62. publicvoidremove(Objectobj)
  63. {
  64. ObjectNodenode=newObjectNode(obj,null);
  65. if(head!=null)
  66. {
  67. if(head.equals(node))
  68. head=head.getNext();//设置第二节点为头节点
  69. else
  70. {
  71. ObjectNodetemp=head;
  72. while(temp.getNext()!=null)
  73. {
  74. if(temp.getNext().equals(node))
  75. {
  76. temp.removeNodeAfter();//删除该节点之后的节点
  77. size--;
  78. break;
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }

节点类:

Java代码
  1. packagedatamemory.link;
  2. //单链节点
  3. publicclassObjectNode
  4. {
  5. privateObjectdata;
  6. privateObjectNodenext;
  7. publicObjectNode(Objectdata,ObjectNodenext)
  8. {
  9. super();
  10. this.data=data;
  11. this.next=next;
  12. }
  13. protectedObjectgetData()
  14. {
  15. returndata;
  16. }
  17. protectedvoidsetData(Objectdata)
  18. {
  19. this.data=data;
  20. }
  21. //在改节点之后添加新节点
  22. publicvoidaddNodeAfter(Objectobj)
  23. {
  24. ObjectNodenode=this.next;
  25. if(node==null)//当改节点是尾节点时,把新加的节点设置为尾节点
  26. {
  27. this.next=newObjectNode(obj,null);
  28. }
  29. else
  30. //把该节点设置为下一节点,原先的节点为新节点的下一节点
  31. {
  32. this.next=newObjectNode(obj,node);
  33. }
  34. }
  35. publicvoidremoveNodeAfter()
  36. {
  37. if(next!=null)
  38. {
  39. next=next.next;//设置下一节点为下下个节点
  40. }
  41. }
  42. protectedObjectNodegetNext()
  43. {
  44. returnnext;
  45. }
  46. protectedvoidsetNext(ObjectNodenext)
  47. {
  48. this.next=next;
  49. }
  50. publicbooleanequals(Objectobj)
  51. {
  52. if(objinstanceofObjectNode)
  53. {
  54. ObjectNodenode=(ObjectNode)obj;
  55. if(node.getData()==this.data)//指向的对象是同一个对象
  56. {
  57. returntrue;
  58. }
  59. }
  60. returnfalse;
  61. }
  62. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值