题目描述:
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
解题思路:
为了反转列表,其实就是为了改变next指针,由指向后一个变为指向前一个。
这里为了避免链表断裂,要保存三个结点,即当前结点,前一个结点和后一个结点。
代码:
public class ReverseListTest {
static class ListNode {
int key;
ListNode next;
}
public static ListNode reverse(ListNode pHead) {
ListNode reverseHead = pHead;
ListNode node = pHead;
ListNode prevNode = null;
while (node != null) {
ListNode next = node.next;
if (next == null) {
reverseHead = node;
}
node.next = prevNode;
prevNode = node;
node = next;
}
return reverseHead;
}
public static void main(String[] args) {
// 建立一个测试链表
ListNode head = new ListNode();
head.key = 0;
ListNode p = head;
for (int i = 1; i < 10; i++) {
ListNode node = new ListNode();
node.key = i;
node.next = null;
p.next = node;
p = node;
}
ListNode pNode = reverse(head);
while(pNode != null){
System.out.println(pNode.key);
pNode = pNode.next;
}
}
}