[关闭]
@XQF 2018-03-07T22:50:57.000000Z 字数 809 阅读 759

如何实现链表的反转

数据结构与算法


关键点在于连接新的表前先要保存一下下一个节点,否则原链表会断开,无法继续进行

  1. class ListNode {
  2. int val;
  3. ListNode next;
  4. public ListNode(int val) {
  5. this.val = val;
  6. }
  7. }
  8. public class Solution {
  9. //k为倒数
  10. public ListNode reserve(ListNode head) {
  11. ListNode p = head;
  12. ListNode dummy = null;
  13. ListNode q;
  14. while (p != null) {
  15. q = p.next;//先保存一下原链表的下一个节点
  16. p.next = dummy;
  17. dummy = p;
  18. p = q;//取出保存位置
  19. }
  20. return dummy;
  21. }
  22. public void print(ListNode head) {
  23. while (head != null) {
  24. System.out.print(" " + head.val);
  25. head = head.next;
  26. }
  27. }
  28. public ListNode getListNode() {
  29. ListNode head = null;
  30. ListNode p = null;
  31. for (int i = 0; i < 10; i++) {
  32. ListNode node = new ListNode(i);
  33. if (head == null) {
  34. head = node;
  35. p = head;
  36. } else {
  37. p.next = node;
  38. p = p.next;
  39. }
  40. }
  41. return head;
  42. }
  43. public static void main(String[] args) {
  44. ListNode head;
  45. Solution solution = new Solution();
  46. head = solution.getListNode();
  47. solution.print(head);
  48. System.out.println();
  49. solution.print(solution.reserve(head));
  50. }
  51. }

测试

0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注