今天遇到一个题实现单向链表的反转,希望各位大虾帮忙

解决方案 »

  1.   

    不知道符合你的要求吗?
    public class NodeTest
    { int data; NodeTest next = null; public NodeTest(int data)
    {
    this.data = data;
    } public static NodeTest convert(NodeTest h)
    { NodeTest b = h; NodeTest a = null; while (h.next != null)
    { a = h.next; h.next = a.next; a.next = b; b = a; } return b;
    } public static void main(String[] args)
    {
    NodeTest head = new NodeTest(0);

    NodeTest tail = head; for (int i = 1; i < 10; ++i)
    {
    NodeTest p = new NodeTest(i);

    tail.next = p;

    tail = p; } head = convert(head);

    while (head.next != null)
    { System.out.println(head.data);

    head = head.next; }
    }}
      

  2.   

    看看java.util.Collections.reverse方法的源码即可
      

  3.   

    public static void reverse(List<?> list) {
            int size = list.size();
            ListIterator<Object> front = (ListIterator<Object>) list.listIterator();
            ListIterator<Object> back = (ListIterator<Object>) list
                    .listIterator(size);
            for (int i = 0; i < size / 2; i++) {
                Object frontNext = front.next();
                Object backPrev = back.previous();
                front.set(backPrev);
                back.set(frontNext);
            }
        }
      

  4.   

    借用 3 个辅助指针
    如:
    初始化
      temp1 = a;
      temp2 = a.next;
      temp3 = a.next.next;
    然后
      temp2.next = temp1;
      temp1 = temp2;
      temp2 = temp3;
      temp3 = temp3.next;
    如此循环下去即可
      
      

  5.   

    以前的面试题
    请用C或者Java语言写出实现将单向链表顺序反转的函数。
    函数的输入为一个指向单向链表表头的指针,输出为指向反转顺序的单向链表表头的指针函数名称:
    C: ListItem* reverseList(ListItem* pHead)
    Java: ListItem printArray(ListItem pHead) 
    ListItem* reverseList(ListItem *pHead)
    {
      ListItem *p1,*p2;
      p1=pHead;
      p2=0;
      while(p1!=0)
      {
        pHead=p1;
        p1=p1->next;
        pHead->next=p2;
        p2=pHead;
      }
      return pHead;

      

  6.   

    把单向链表里的元素顺序放到stack里,然后stack再pop到链表里,如此便可
      

  7.   

    ArrayList list1=new ArrayList();
    for(int i=list2.size()-1;i>=0;i--){
       list1.add(list2.get(i));
    }类似这样的结构了,实现了ArrayList的反转