vs2010 c 网站开发,买卖网站,培训心得体会模板,佛山外贸网站建设价位一、理论
1 单链表结构 2 增、删、查 、改思路
#xff08;增#xff09;直接添加放到最后即可。按顺序添加#xff1a;找到要修改的节点的前一个节点#xff0c;插入新节点#xff08;#xff09;。#xff08;改#xff09;要修改的节点修改内容即可。#xff08;…一、理论
1 单链表结构 2 增、删、查 、改思路
增直接添加放到最后即可。按顺序添加找到要修改的节点的前一个节点插入新节点。改要修改的节点修改内容即可。删找到待删除节点的前一个节点把要删除节点的后一个节点信息存放到该节点的next即可查较容易遍历依次打印即可。按编号查找找到对应编号打印即可
二、代码实现
1、JAVA代码实现
package basicdata;public class SingleLinkedListTest {public static void main(String[] args) {Node node1 new Node(123, Tom, 无极剑道);//SingleLinkedList singleLinkedList new SingleLinkedList();singleLinkedList.addNode(node1);singleLinkedList.list();System.out.println(*******************);singleLinkedList.addByOrder(new Node(234, Jack, 断头斩杀));singleLinkedList.addByOrder(new Node(121, Jack, 断头斩杀));singleLinkedList.addByOrder(new Node(121, Jack, 断头斩杀));singleLinkedList.list();//System.out.println(******修改后*******);//singleLinkedList.alter(new Node(121, Bob, 无形之刃));//singleLinkedList.list();// System.out.println(**************);//singleLinkedList.delNode(234);System.out.println(***反转后***);singleLinkedList.reverSetList();singleLinkedList.list();}
}
//
class SingleLinkedList{// 先初始化一个头结点,头节点不存放数据private Node head new Node(0,表头,领导单链表);// 返回表头public Node getHead(){return head;}public SingleLinkedList() {}// 添加节点到单链表按添加顺序排列public void addNode(Node node){// 思路把头结点的地址给temp// 直到next null时让next存放添加的节点Node temp head;while (true){if (temp.next null) {break;}else {temp temp.next;}}// 退出while 循环时 temp.next nulltemp.next node;}// 遍历单链表public void list(){Node temp head;if (head null) {System.out.println(链表为空);return;}while (true){if (temp null) {break;}else {// 输出节点信息System.out.println(temp);// 指针后移temp temp.next;}}}// 根据编号顺序插入节点 链表内容按编号从小到大排列public void addByOrder(Node node){// 需要先找到要添加位置的前一个节点// 链表为空不需要单独考虑Node temp head;// 为找到插入位置 需要一个 flagboolean flag false;while (true){// 此情况可以添加添加到表头后if (temp.next null) { // 到链表末端break;}// 此情况不可以添加要添加的编号已经存在if (temp.next.number node.number) {flag true;break;}//此情况为找到要添加位置的前一个节点可以添加if (temp.next.number node.number) {break;}else {temp temp.next;}}if (flag ) {System.out.printf(你要插入的节编号%d已经存在,node.number);System.out.println();}else {node.next temp.next ;temp.nextnode;}}// 修改节点信息根据编号,编号不变修改内容public void alter(Node node){if (head.next null) {System.out.println(链表为空);return;}// 和按编号插入(Node temp head;)稍微有点区别// Node temp head.next;Node temp head.next;boolean flag false;while (true){if (temp null) {break;}// 找到要修改的节点可以修改if (temp.number node.number) {flag true;break;}else {temp temp.next;}}if (flag) {// 修改temp.name node.name;temp.skill node.skill;}else {System.out.println(没有找到要修改的节点);}}// 根据编号删除节点public void delNode(int number){//需要找到待删除的前一个节点Node temp head;boolean flag false;while (true){if (temp.next null) {break;}//找到待删除的前一个节点if (temp.next.number number) {flag true;break;}else {temp temp.next;}}if (flag ) {//temp.next temp.next.next;}else {System.out.println(要删除的元素不存在);}}// 反转单链表public void reverSetList(){if (this.head.next null||this.head.next.nextnull) {return;}Node tempCur this.head.next; // 辅助变量Node tempNext null; // 指向tempCur不然会丢失Node reverSetHead new Node(0, , ); // 新链表while (tempCur ! null){tempNext tempCur.next; //存储当前节点的下一节点tempCur.next reverSetHead.next;// 头插法 把当前节点接到到reverSetHeadreverSetHead.next tempNext;tempCurtempNext;// 后移}this.head.next reverSetHead.next;}}
// 定义Node
class Node{public int number;public String name;public String skill;public Node next; //存放下一个节点地址
//构造器public Node(int number, String name, String skill) {this.number number;this.name name;this.skill skill;//this.next next;// 理解不给next赋值//没申请一个节点时 next null}//重写 toStringOverridepublic String toString() {return Node{ number number , name name \ , skill skill \ };}
}
运行结果
Node{number0, name表头, skill领导单链表}
Node{number123, nameTom, skill无极剑道}
*******************
你要插入的节编号121已经存在
Node{number0, name表头, skill领导单链表}
Node{number121, nameJack, skill断头斩杀}
Node{number123, nameTom, skill无极剑道}
Node{number234, nameJack, skill断头斩杀}
******修改后*******
Node{number0, name表头, skill领导单链表}
Node{number121, nameBob, skill无形之刃}
Node{number123, nameTom, skill无极剑道}
Node{number234, nameJack, skill断头斩杀}
删除后**************
Node{number0, name表头, skill领导单链表}
Node{number121, nameBob, skill无形之刃}
Node{number123, nameTom, skill无极剑道}2、C语言代码实现