把一个单链表倒置

1.要求是把单链表倒置,比如单链表为1 2 3 4 5,倒置后为5 4 3 2 1。
2.有两种办法,一种是创建一个新链表,把之前链表的数按照头插法依次插进去,但是注意在插入当前结点之后,这个结点指向新链表的元素,应该找一个结点把当前结点保存下来,代码如下:

public Node reverseList(Node head)   //倒置单链表
	  {
		 Node newHead=null;
		 Node cur=head;
		 while(cur!=null)
		 {
			Node node=cur.next;        //创建一个结点保存
			cur.next=newHead;
			newHead=cur;               
			cur=node;                      //这里的cur置为操作之前结点的next
		 }
		 return newHead;
	  }

第二种办法是使用三个引用,
把一个单链表倒置_第1张图片
开始是这样子

首先让p2的next为p1,然后把p1,p2,p3,依次向后移
把一个单链表倒置_第2张图片
再重复一步就是这样
把一个单链表倒置_第3张图片
然后继续重复这一步,最后一步为
把一个单链表倒置_第4张图片
循环判断条件为p2!=null,如果p2为空,p1刚好为原链表的最后一个结点的引用
所以代码为

public Node reverseList1(Node head)     //  第二种倒置的办法
	  {
		  if(head==null)
		  {
			  System.out.println("链表为空");
			  return null;
		  }
		  Node p1=null;
		  Node p2=head;
		  Node p3=head.next;
		  
		  while(p2!=null)
		  {
			  p2.next=p1;
			  p1=p2;
			  p2=p3;
			  if(p3!=null)
			  {
				  p3=p3.next;  
			  }
			  
		  }
		  return p1;
		  
	  }

你可能感兴趣的:(把一个单链表倒置)