面试题24:反转链表
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
思路:遍历链表,并用头插法插入到头节点之后。其中由于会出现链表断节,所以注意保存待插入节点的后一个节点。
代码实现:
package Question24;
public class T01 {
public static void main(String[] args) {
Node head = new Node(0);
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
Node node6 = new Node(6);
head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
solve(head);
Node cur = head.next;
while(cur != null) {
System.out.println(cur);
cur = cur.next;
}
}
public static Node solve(Node head) {
if(head == null) return null;
Node cur = head.next;
head.next = null;
Node temp;
while(cur != null) {
temp = cur.next;
cur.next = head.next;
head.next = cur;
cur = temp;
}
return head;
}
}
class Node {
int id;
Node next;
public Node(int id) {
this.id = id;
}
@Override
public String toString() {
return "Node{" +
"id=" + id +
'}';
}
}