链表反转

链表反转

输入一个链表,反转链表后,输出新链表的表头。

Java的链表定义

class LinkNode{
  int data;
  LinkNode next;

  LinkNode(int data)
  {
    this.data=data;
  }
  
  /*****为链表增加节点*****/
  public void addLinkNode(int data)
  {
    LinkNode newnode=new LinkNode(data);
    if(this.next==null)//这里的this每次指向的都是该链表的第一个节点
        this.next=newnode;
    else
        this.next.addLinkNode(data);
  }
  
  /****打印节点值*****/
  public void print()
  {
    System.out.print(this.data);
    if(this.next!=null)
    {
      System.out.print("->");
      this.next.print();
    }
  }

}

反转链表

在不产生额外的开销情况下,只是依靠指针的next指向来进行反转,反转过程如下:
链表反转

代码如下:

 public ListNode ReverseList(ListNode head) {
        if(head==null)
            return null;
        ListNode pre=null;
        ListNode next=null;
        
        while(head!=null)
        {
            next=head.next;
            head.next=pre;
            
            pre=head;
            head=next;
        }
        return pre;
    }
上一篇:数据结构和算法-链表的原理以及初始化


下一篇:C 练习实例35题目--字符串反转