由于java中没有结构体,所以用一个类来定义链表,代码如下
主要包括一个data,还有一个指向后面一个节点的next
重写了toString函数,返回你想要的数据
定义链表的类:
public class LinkNode {
private String data;
public LinkNode next;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public LinkNode getNext() {
return next;
}
public void setNext(LinkNode next) {
this.next = next;
}
public LinkNode(String data, LinkNode next) {
super();
this.data = data;
this.next = next;
}
public LinkNode() {
super();
}
@Override
public String toString() {
return "LinkNode{" +
"data='" + data + '\'' +
", next=" + next +
'}';
}
|
1.初始化链表:
public static void initLinkNode(LinkNode linkNode) {
linkNode.setData("#");
linkNode.setNext(null);
} |
2.遍历链表,返回链表的长度
public static int traverse(LinkNode linkNode) {
LinkNode p = linkNode;
int count = 1;
while (p.next != null) {
p = p.next;
count++;
}
return count;
} |
3.把链表L的data转化为StringBuffer输出,输出结果为字符串
public static StringBuffer outputLinkNode(LinkNode L) {
StringBuffer str = new StringBuffer();
LinkNode p = L;
for (@SuppressWarnings("unused") int i = 0; ; ) {
str.append(p.data);
if (p.next != null) {
p = p.next;
} else {
break;
}
}
return str;
} |
4.在链表L的尾部插入一个节点,值为data
public static void insertLinkNode(LinkNode linkNode, String data) {
LinkNode p = linkNode;
for (int i = 0; ; ) {
if (null == linkNode.next) {
LinkNode q = new LinkNode();
q.setData(data);
q.setNext(null);
linkNode.setNext(q);
break;
} else {
linkNode = linkNode.next;
}
}
} |
5.删除第n个节点(从0开始)
public static void deleteLinkNode(LinkNode linkNode, Integer index) {
LinkNode p = linkNode;
int count = 1;
while (true) {
if (count == index) {
p.setNext(p.next.next);
break;
}
count++;
p = p.next;
}
} |
6.返回最后一次出现data的节点位置index
public static int getIndex(LinkNode linkNode, String data) {
LinkNode p = linkNode;
int flag = 0;
for (int i = 0; i < traverse(linkNode); i++) {
if (p.data == data) {
// System.out.println(i);
flag = i;
}
p = p.next;
}
return flag;
} |
测试程序:
public static void main(String[] args) {
LinkNode linkNode = new LinkNode();
initLinkNode(linkNode);
System.out.println(linkNode.toString());
System.out.println("插入节点");
insertLinkNode(linkNode, "R");
insertLinkNode(linkNode, "R");
insertLinkNode(linkNode, "L");
insertLinkNode(linkNode, "L");
insertLinkNode(linkNode, "R");
insertLinkNode(linkNode, "L");
System.out.println(linkNode.toString());
int count = traverse(linkNode);
System.out.println("节点个数" + count);
int lastIndex = getIndex(linkNode,"R");
System.out.println("最后一个R位置" + lastIndex);
int index=2;
System.out.println("删除位置:"+index+"的节点");
deleteLinkNode(linkNode,index);
count =traverse(linkNode);
System.out.println("节点个数"+count);
StringBuffer str =outputLinkNode(linkNode);
System.out.println(str);
System.out.println(linkNode.toString());
} |
结果如下:
| LinkNode{data='#', next=null} 插入节点 LinkNode{data='#', next=LinkNode{data='R', next=LinkNode{data='R', next=LinkNode{data='L', next=LinkNode{data='L', next=LinkNode{data='R', next=LinkNode{data='L', next=null}}}}}}} 节点个数7 最后一个R位置5 删除位置:2的节点 节点个数6 #RLLRL LinkNode{data='#', next=LinkNode{data='R', next=LinkNode{data='L', next=LinkNode{data='L', next=LinkNode{data='R', next=LinkNode{data='L', next=null}}}}}} |
版权声明:本文为qq_31591237原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。