单链表实现及逆序

来源:互联网 发布:linux ps和netstat 编辑:程序博客网 时间:2024/06/06 09:21

方法一:

来自这里:http://www.cnblogs.com/jsczljh/p/3765720.html

定义节点

package test001;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;}@Overridepublic String toString() {return "data=" + data + ", " + next;}}


反转工具类:

package test001;public class ReverseUtil {public static Node reverse(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;}}

测试:

package test001;public class Test {public static void main(String[] args) {Node head = new Node();head.setData(0);head.setNext(null);Node p;p=head;for (int i = 1; i <= 10; i++) {Node q = new Node();q.setData(i);q.setNext(null);p.setNext(q);p=q;}System.out.println(head);System.out.println("======");System.out.println(ReverseUtil.reverse(head));}}


方法二:

来自这里:http://www.nowamagic.net/librarys/veda/detail/2241


这个就是每次把头节点的下一个节点,放到最前面,这样头节点和它互换位置。依次类推


// 原链表,current = 68, pnext = 55,68指向18,55指向18,头结点指向55
-> 68 -> 55 -> 18 -> 45 -> 41 -> 43 -> 5 -> 28 -> 80 -> 67
 
// 第一次交换后,原链表变成这样
-> 55 -> 68 -> 18 -> 45 -> 41 -> 43 -> 5 -> 28 -> 80 -> 67


// 进行第二次交换,pnext = 18,68指向45,18变成头结点


-> 18 -> 55 -> 68 -> 45 -> 41 -> 43 -> 5 -> 28 -> 80 -> 67


// 进行第三次交换,pnext = current->next = 45,68指向41,45变成头结点


-> 45 -> 18 -> 55 -> 68 -> 41 -> 43 -> 5 -> 28 -> 80 -> 67


package test002;public class SingleLinkedReverse {          class Node{          int data;          Node next;                    public Node(int data){              this.data = data;          }       }         public static void main(String[] args) {          SingleLinkedReverse slr = new SingleLinkedReverse();          Node head, tail;          head = tail = slr.new Node(0);          for(int i=1; i<10; i++){              Node p = slr.new Node(i);              tail.next = p;              tail = p;          }          tail = head;          while(tail != null){              System.out.print(tail.data+"  ");              tail = tail.next;          }          System.out.println(" ");        head = reverse(head);                    while(head != null){              System.out.print(head.data+"  ");              head = head.next;          }      }          private static Node reverse(Node head) {          Node p1,p2 = null;          p1 = head;                    while(head.next != null){              p2 = head.next;              head.next = p2.next;              p2.next = p1;              p1 = p2;          }          return p2;      }  }  


原创粉丝点击