网站的代理页面怎么做,网站后台基本功能,番禺区画册设计公司,东莞市微客巴巴做网站题目#xff1a;将一个有链表头的单向单链表逆序
分析#xff1a;
链表为空或只有一个元素直接返回#xff1b;设置两个前后相邻的指针p,q#xff0c;使得p指向的节点为q指向的节点的后继#xff1b;重复步骤2#xff0c;直到q为空#xff1b;调整链表头和链表尾…题目将一个有链表头的单向单链表逆序
分析
链表为空或只有一个元素直接返回设置两个前后相邻的指针p,q使得p指向的节点为q指向的节点的后继重复步骤2直到q为空调整链表头和链表尾
图解 以链表A-B-C-D为例逆序此链表。 0.初始状态 1.2.3 循环部分 p head-next; while(q!null){ q head-next-next; t q-next; t null; q-next p; p q; q t; } 0.初始状态 1.第一次循环 2.第二次循环 3.第三次循环 4.qnull循环结束 head-next-next null;//设置链表尾 head-next p;//修改链表头 实现及测试代码
节点Node类 package linkList.reverse;/*** 链表节点* author Administrator**/
public class Node {private Integer data;//节点数据域private Node next;//节点指针域public Integer getData() {return data;}public void setData(Integer data) {this.data data;}public Node getNext() {return next;}public void setNext(Node next) {this.next next;}
} 逆序方法 /*** * param node 原始链表头节点* return 逆序后链表头节点*/Node reverseList(Node head){//如果链表为空或只有一个元素直接返回if(head.getNext()null||head.getNext().getNext()null){return head;}Node p head.getNext();Node q head.getNext().getNext();Node t null;while(q!null){t q.getNext();q.setNext(p);p q;q t;}//设置链表尾head.getNext().setNext(null);//修改链表头head.setNext(p);return head;} 测试代码 //表头Node head new Node();head.setData(-1);head.setNext(null);//定义指针Node p;p head;//初始化链表数据[1~10]for(int i1;i10;i){Node q new Node();q.setData(i);q.setNext(null);p.setNext(q);p q;}//输出原始链表printList(head);System.out.println();//输出逆序后的链表printList(reverseList(head));