【题目】输入一个链表,反转链表后,输出链表的所有元素。
【思路】将当前指针指向前者即为反转,反转是同时反转指针和赋值操作。即将指针指向前者并给前者赋值。反转后的头结点就是原链表的尾 结点。代码如下:
1 package com.exe3.offer; 2 /** 3 * 13【题目】输入一个链表,反转链表后,输出链表的所有元素。 4 * @author WGS 5 * 6 */ 7 public class ReverseLinkList { 8 public static class LinkNode{ 9 int val; 10 LinkNode next=null; 11 public LinkNode(int n){ 12 this.val=n; 13 } 14 } 15 16 public LinkNode getReverseLink(LinkNode headnode){ 17 LinkNode preNode=null;//当前结点的前一个结点 18 LinkNode curNode=headnode;//当前结点 19 LinkNode reverseHeadNode=null;//反转后的头结点,即原链表的尾结点。 20 21 while(curNode!=null){ 22 LinkNode nextNode=curNode.next; 23 if(nextNode==null) 24 reverseHeadNode=curNode; 25 //反转是将指针指向前者,值也同时赋给前者 26 curNode.next=preNode;//指针反向 27 preNode=curNode;//同时赋值 28 curNode=nextNode; 29 30 } 31 return reverseHeadNode; 32 } 33 34 public static void main(String[] args){ 35 ReverseLinkList r=new ReverseLinkList(); 36 LinkNode node1=new LinkNode(1); 37 LinkNode node2=new LinkNode(2); 38 LinkNode node3=new LinkNode(3); 39 LinkNode node4=new LinkNode(4); 40 LinkNode node5=new LinkNode(5); 41 node1.next=node2; 42 node2.next=node3; 43 node3.next=node4; 44 node4.next=node5; 45 LinkNode node=r.getReverseLink(node1); 46 System.out.println("头结点是"+node.val); 47 while(node!=null){ 48 System.out.println(node.val); 49 node=node.next; 50 } 51 } 52 53 54 }
时间: 2024-10-25 00:12:35